目录
[🌴增(Insert)](#🌴增(Insert))
🎍前言
Mybatis的开发有两种⽅式:
-
- 注解
-
- XML
上⾯学习了注解的⽅式,接下来我们学习XML的⽅式
使⽤Mybatis的注解⽅式,主要是来完成⼀些简单的增删改查功能.如果需要实现复杂的SQL功能,建 议使⽤XML来配置映射语句,也就是将SQL语句写在XML配置⽂件中.
MyBatis XML的⽅式需要以下两步:
-
- 配置数据库连接字符串和MyBatis
-
- 写持久层代码
🍀配置连接字符串和MyBatis
配置XML的路径信息
application.yml⽂件配置内容如下:
classpath对应resources目录,那么xml路径是resources目录下创建mappper,在创建以Mapper.xml文件结尾的文件

🍃写持久层代码
持久层代码分两部分
- ⽅法定义Interface
- ⽅法实现:XXX.xml
🚩添加mapper接口
数据持久层的接⼝定义:
🚩添加UserInfoMapper.xml
数据持久成的实现,MyBatis的固定xml格式:
🚩单元测试
单元测试类创建如下:
测试类初始代码如下:
接下来我们就可以进行实现增删改查了。
🌲查(Select)
UserInfoXMLMapper接口代码如下:
UserInfoMapper.xml代码如下:
- id:指方法名
- resultType:指返回的数据类型,上述使用的List但是并不是,而是上篇文章中定义的实体类(UserInfo),通过全限定类名表示
测试代码如下:
启动测试类如下:
我们上面在进行查询所有内容时,结果显⽰:deleteFlag,updateTime进⾏赋值了
因为数据库与java命名规则不同,数据库的蛇形将转换成驼峰,因为我们在yml配置中设置了驼峰自动转换,所以这里能进行赋值,即这里跟使用注解的方式相同。若想此配置注释掉,则deleteFlag,updateTime打印为null
在上篇文章中说到解决这个办法的方式有三种:
- 起别名
- 结果映射
- 开启驼峰命名
通过起别名的方式我们也可以在xml中,通过SQL语句来进行,和使用注解的SQL语句相同,这里我们就来说说xml结果映射的方式。
🚩结果映射
UserInoXMLMapper接⼝:
添加XML:
测试代码:
执行结果:
小结:在实际开发中,建议把<result></result>写全,比如那些相同的字段和属性(username......)
🌴增(Insert)
UserInoXMLMapper接⼝:
UserInfoMapper.xml实现如下:
测试单元代码如下:
启动测试结果如下:
查询数据库如下:
🚩返回自增id
接⼝定义不变,UserInfoMapper.xml实现设置useGeneratedKeys和keyProperty属性
进行单元测试:
启动测试结果如下:
🎄改(Update)
UserInfoXMLMapper接⼝:
UserInfoMapper.xml实现如下:
测试单元代码如下:
测试单元代码启动:
修改前数据库:
修改之后数据库:
🎋删(Delete)
UserInfoXMLMapper接⼝:
UserInfoMapper.xml实现如下:
测试单元代码如下:
启动元测试代码如下:
删除数据之前:
删除数据之后:
总结:
-
- 引入依赖
-
- 配置文件中,配置Mapper xml的路径(确保路径正确)
-
- xml中的id要和方法名保持一致
-
- 不同的操作,使用不同的标签 <select><update><delete><insert>
-
- namespace 标识实现的哪个接口,通过全限定类名(包名+类名)
-
- 参数传递
-
- SQL语句
- SQL语句
🌳多表查询
多表查询和单表查询类似,只是SQL不同⽽已;但是在企业开发中,很少使用多表查询,通常情况下,都是使用单表查询来替代。
🚩准备工作
在上篇文章中建了一张用户表
我们再来建⼀张⽂章表,进⾏多表关联查询.⽂章表的uid,对应⽤⼾表的id
数据准备:
对应Model:
需求:根据uid查询所有文章表信息,以及用户表中的作者和年龄等相关信息
接⼝定义:
编写测试代码:
运行测试代码:SQL语句发生错误
修改接口:在换行时加上空格
运行测试代码:
如果名称不⼀致的,采⽤ResultMap,或者别名的⽅式解决,和单表查询⼀样
Mybatis 不分单表还是多表,主要就是三部分:SQL,映射关系和实体类
通过映射关系,把SQL运⾏结果和实体类关联起来