MyBatis XML配置文件(下)

          MyBatis的开发有两种方式:1、注解  2、XML。使用MyBatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。

        MyBatis XML开发的方式需要以下两步:1、配置数据库连接字符串和MyBatis。2、写持久层代码。

        准备代码:UserInfo实体类        

1. 配置连接字符串和MyBatis

        我们需要进行设置两个步骤,数据库连接字符串设置MyBatis的XML文件配置。如果是application.yml,配置内容如下:

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mybaties_test_0822?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8username: rootpassword: 111111driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #配置打印 MyBatis⽇志map-underscore-to-camel-case: true  #自动驼峰转换mapper-locations: classpath:mapper/**Mapper.xml# 配置 mybatis xml 的⽂件路径,在 resources/mapper 创建所有表的 xml ⽂件

        此处注意congratulations和mapper-locations是同一级标题; 

2. 写持久层代码

      持久层代码分两部分:1、方法定义 Interface

                                          2、方法实现:XXX.xml

其逻辑运行如下所示:

2.1 添加 mapper 接口

        创建一个mapper包,在这个包下创建USerInfoMapper接口,如图:

,其接口代码如下:

package com.example.zxslzw_mybaties.mapper;import com.example.zxslzw_mybaties.model.UserInfo;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper
public interface UserInfoMapper {List<UserInfo> queryAllUsers();
}

2.2 添加 USerInfoMapper.xml

        在result包下创建mybatis包,在mybatis包下创建 USerInfoMapper.xml 文件,如图:

        USerInfoMapper.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.zxslzw_mybaties.mapper.UserInfoMapper"><select id="queryAllUsers" resultType="com.example.zxslzw_mybaties.model.UserInfo">select * from userinfo</select>
</mapper>

        以下是对上面标签的说明:

        1、<mapper>标签:需要指定 namespace 属性,表示命名空间,值为 mapper 接口的全限定名,包括全包名.类名

        2、<select>查询标签:是用来执行数据库的查询操作的。

        3、id:是和 Interface (接口) 中定义的方法名称一样的,表示对接口的具体实现方法

        4、resultType:是返回的数据类型(使用全限定名),也就是开头我们定义的实体类。

         各标签对应关系:

2.3 测试类代码 

package com.example.zxslzw_mybaties.mapper;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;@SpringBootTest
class UserInfoMapperTest {@Autowiredprivate UserInfoMapper userInfoMapper;@Testvoid query(){System.out.println(userInfoMapper.queryAllUsers());}
}

        对应的数据库中表的数据:

        运行结果如下:

3. 增删改查操作 

3.1 Insert

        UserInfoMapper接口代码:

 Integer insert(UserInfo userInfo);

        xml配置文件内容:

    <insert id="insert">insert into userinfo (username, password, age, gender)values (#{username}, #{password}, #{age}, #{gender})</insert>

         测试类代码:

 @Testvoid insert() {UserInfo userInfo = new UserInfo();userInfo.setUsername("xuyangyuzhuo");userInfo.setPassword("888888");userInfo.setAge(20);userInfo.setGender(2);System.out.println(userInfoMapper.insert(userInfo));}

        控制台如下所示:

        数据库中的表信息如下:

3.1.1 使⽤@Param 

        如果使⽤@Param设置参数名称的话, 使⽤⽅法和注解类似 :

UserInfoMapper接⼝:

Integer insertUser(@Param("userinfo") UserInfo userInfo);

UserInfoMapper.xml实现:

<insert id="insertUser">insert into userinfo (username, `password`, age, gender, phone) values(#{userinfo.username},#{userinfo.password},#{userinfo.age},#
{userinfo.gender},#{userinfo.phone})
</insert>

3.1.2 返回⾃增 id

        接⼝定义不变, Mapper.xml 实现 设置useGeneratedKeys 和keyProperty属性:

<insert id="insertUser" useGeneratedKeys="true" keyProperty="id">insert into userinfo (username, `password`, age, gender, phone) values(#{userinfo.username},#{userinfo.password},#{userinfo.age},#
{userinfo.gender},#{userinfo.phone})
</insert>

3.2 Delete

        接口代码如下:

 Integer delete(Integer id);

         xml内容如下:

<delete id="delete">delete from userinfo where id = #{id}</delete>

        测试类代码如下:

 @Testvoid delete() {System.out.println(userInfoMapper.delete(5));}

        运行测试类前表的内容:

        运行测试类后,结果如下:

3.3 update

        接口类代码如下:

 Integer update(UserInfo userInfo);

         xml内容如下:

 <update id="update">update userinfo set username = #{username} where id = #{id}</update>

        测试类代码:

 @Testvoid update() {UserInfo userInfo = new UserInfo();userInfo.setId(7);userInfo.setUsername("wangyi");userInfoMapper.update(userInfo);}

 运行测试类后,结果如下:

3.4 select

        xml文件配置了开启驼峰命名;

        接口如下:

List<UserInfo> select2();

        xml文件如下:

<select id="select2" resultType="com.example.mybatisxmldemo2.model.UserInfo">select * from userinfo</select>

        测试类代码如下:

@Testvoid select2() {System.out.println(uSerInfoXmlMapper.select2());}

        运行结果如下:

ps:本文的内容就到这里了,如果 对你有所帮助的话就请一键三连哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/408883.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象02:构造器详解

本节内容视频链接&#xff1a;面向对象05&#xff1a;构造器详解_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p64&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 构造器&#xff08;‌Constructor&#xff09;‌是一种特殊的方法&#xff0c;‌用于初始…

linux下的oracle启动命令

一、服务器断电后&#xff0c;手工启动oracle数据库步骤如下&#xff1a; 1、进入数据库服务器&#xff0c;切换到oracle用户,命令&#xff1a;su - oracle 2、启动数据库&#xff0c;命令&#xff1a; 1&#xff09; sqlplus / as sysdba 2) startup 3&#xff09;如果数据库已…

【Qt笔记】Qt界面显示时间

目录 一、前言 二、基本概念 三、代码实现 1. 获取本地时间&#xff0c;并将其转换成自己想要的格式 2.创建一个QLabel控件用于显示时间字符串 3.创建QTimer定时器更新时间 四、优化 1. 格式优化 1.1 初始化 1.2 获取星期 1.3 更改格式 1.4 定时器超时函数 1.5 …

代码随想录 | day 15 | 二叉树part03

完全二叉树的节点个数 方法一&#xff1a;可以用递归法遍历一遍左子树和右子树的个数之和再加1等于全部节点个数 class Solution { public:int getcount(TreeNode* cur){if(curNULL) return 0;int leftcount getcount(cur->left);int rightcount getcount(cur->right…

以简单的例子从头开始建spring boot web多模块项目(四)-多模块工具类

目的是为了验证主工程调用工具工程。 1、新建模块&#xff0c;名称为WebTool 同样为Maven Archetype&#xff0c;类型为 org.apache.maven.archetypes:maven-archetype-quickstart 2、修改pom.xml 增加spring-boot-starter的依赖。 <dependency><groupId>org.spri…

【科研绘图】【分条热力图】:附Origin详细画图流程 + 案例分析

目录 No.1 理解分条热力图 No.2 画图流程 1 导入数据&#xff0c;绘制图形 2 设置绘图细节 3 色阶控制 4 设置坐标轴 5 效果图 No.3 案例分析 1 案例一 2 案例二 No.1 理解分条热力图 分条热力图&#xff0c;基于数据映射和颜色编码&#xff0c;是在热力图的基础上进…

【Hot100】LeetCode—437. 路径总和 III

目录 1- 思路前缀和哈希表dfs 2- 实现⭐437. 路径总和 III——题解思路 3- ACM 实现 题目连接&#xff1a;437. 路径总和 III 1- 思路 前缀和哈希表dfs ① 前缀和 求二叉树的前缀和&#xff0c;每求一次用一个 sum 传参记录更新 ② 哈希表 key 为前缀和 &#xff0c;value…

RISCV汇编编程讲解

第一章 引言 为什么要讲riscv&#xff1f; riscv的特点&#xff1a; -诞生于顶尖学术机构&#xff1a;诞生于加州大学伯克利分校的体系结构研究院。吸引了大批的顶尖企业参与&#xff08;e.g. 谷歌、华为、高通、阿里巴巴为rsicv的发展提供了大量的资金支持和贡献了技术和人才…

Oracle Linux 7.9 安装minikube体验

1.环境信息 前置所需&#xff1a; 操作系统&#xff1a;Oracle Linux 7.9 虚拟机配置&#xff1a;CPU:4核 内存&#xff1a;4G 容器&#xff1a;docker 26.1.4 安装minikube后环境&#xff1a; minikube: v1.33.1 kubernetes:v1.23.3 minukube体验说明&#xff1a;使用Virtua…

flume--数据从kafka到hdfs发生错误

解决&#xff1a; #1.将flume自带的依赖删除 mv /opt/installs/flume1.9/lib/guava-11.0.2.jar /opt/installs/flume1.9/lib/guava-11.0.2.jar.bak #2.将hadoop的依赖发送到flume下 cp /opt/installs/hadoop3.1.4/share/hadoop/common/lib/guava-27.0-jre.jar /opt/installs/f…

【C++ Primer Plus习题】5.9

问题: 解答: #include <iostream> #include <cstring> using namespace std;#define SIZE 20int main() {string words[SIZE];string done "done";int count 0;while (true){cout << "请输入单词:" << endl;cin >> words…

中国发布首个AI集成Linux开源操作系统

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 AI圈最近又发生了啥新鲜事&#xff1f; 中国大模型市场迎来新格局&#xff1a;百度、商汤、智谱位列前三 国际数据公司&#xff08;IDC&#xff09;于首次发布了《中国大模型平台市场份额&#xff0…

NYX靶机笔记

NYX靶机笔记 概述 VulnHub里的简单靶机 靶机地址&#xff1a;https://download.vulnhub.com/nyx/nyxvm.zip 1、nmap扫描 1&#xff09;主机发现 # -sn 只做ping扫描&#xff0c;不做端口扫描 nmap -sn 192.168.84.1/24 # 发现靶机ip为 MAC Address: 00:50:56:E0:D5:D4 (V…

适用于应用程序安全的 11 大 DevSecOps 工具

DevSecOps&#xff08;开发者安全运营&#xff09;是指将安全最佳实践融入软件开发生命周期的过程&#xff0c;从而实现更好的安全结果。这是提供全面安全基础设施的重要方面。 市场格局&#xff1a;DevSecOps市场竞争激烈。该领域有数百家供应商提供工具&#xff0c;帮助组织…

虚幻5|AI行为树,跟随task(非行为树AI)

这个可以不需要行为树 1.打开ai的角色蓝图后&#xff0c;添加一个函数&#xff0c;命名为跟距离改变速度 并用tick调用 2.编辑函数

在VBA中调用Adobe Acrobat或Reader的命令行工具,实现PDF自动打印 (‾◡◝)

在VBA&#xff08;Visual Basic for Applications&#xff09;中自动打印PDF文件通常不直接支持&#xff0c;因为VBA本身是针对Microsoft Office应用程序&#xff08;如Excel、Word和PowerPoint等&#xff09;的编程语言&#xff0c;并不直接处理PDF文件。但是&#xff0c;你可…

【变化检测】基于Tinycd建筑物(LEVIR-CD)变化检测实战及ONNX推理

主要内容如下&#xff1a; 1、LEVIR-CD数据集介绍及下载 2、运行环境安装 3、Tinycd模型训练与预测 4、Onnx运行及可视化 运行环境&#xff1a;Python3.8&#xff0c;torch1.12.0cu113 likyoo变化检测源码&#xff1a;https://github.com/likyoo/open-cd 使用情况&#xff1a…

学习文件IO,让你从操作系统内核的角度去理解输入和输出(Java实践篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

经验之谈 —— 数据处理与分析的6大Python库

点击下方卡片&#xff0c;关注“小白玩转Python”公众号 Python是一种流行的高级编程语言。它拥有丰富的生态系统和庞大的社区。这个生态系统中有许多优秀的Python库。这些库提供了有用的工具&#xff0c;使开发变得更加容易。本文将介绍6个出色的Python库。这些库在不同领域都…

数据结构初阶(2)——链表OJ

目录 1.面试题 02.02. 返回倒数第 k 个节点 2.OR36 链表的回文结构 3.160. 相交链表 1.面试题 02.02. 返回倒数第 k 个节点 思路&#xff1a;快慢指针&#xff0c;快指针先走k格&#xff0c;慢指针同步 /*** Definition for singly-linked list.* struct ListNode {* i…