Mybatis单表 | 多表 | 动态sql 查询

一:单表增删改查xml

注:update不建议这么写sql,文章后有动态sql的写法,用到了trim代替了set,注意ifnull的情况

Mybatis单表 | 多表 | 动态sql 查询_第1张图片
单表的sql映射,没什么好说的

二:多表的连接查询

引言:在多表之间如果存在外键关联需要建立DTO类来继承entity包下的实体类,下面是 小区:楼栋(1:n) 的demo,另外多表连接映射的时候需要将resultType改为resultMap
一个小区存在多个楼栋,所以属性有个List ldList;
一个楼栋只能属于一个小区,所以属性有Xq xq;

Mybatis单表 | 多表 | 动态sql 查询_第2张图片

Mybatis单表 | 多表 | 动态sql 查询_第3张图片

多表间嵌套查询xml(1:n)

sql要求:根据指定小区id找到小区+楼栋的全部信息,注(小区 : 楼栋 = 1:n) 用到了collection来存储楼栋详细信息List ldList

Mybatis单表 | 多表 | 动态sql 查询_第4张图片
Mybatis单表 | 多表 | 动态sql 查询_第5张图片
这里就不提供等值连接查询了,不好用

多表间嵌套查询xml(n:1)

sql要求:根据具体楼栋id找到这个小区+楼栋的所有信息,注:(楼栋 : 小区 = n : 1)用到了association关联,

Mybatis单表 | 多表 | 动态sql 查询_第6张图片

三:动态sql语句

引言:在我们学会了单表的增删改查后,单次增删已经无法满足我们了,想要直接通过一个方法对多个数据操作,就比如说你想删除一些id的数据,映射文件就对你传的idList(int[] 或Intger[] 都可以实现,但需要用collection控制别名)操作就可以了
解释:
foreach : 遍历list
item : list中的每个元素
open : 字符串连接的前缀
separator : 删除字符串中的字符 例如","
close:字符串连接的后缀

查找id在idList中的数据

> sql:select id,name from dept where id in(?,?,?..) Mybatis单表 | 多表 | 动态sql 查询_第7张图片
这里需要传一个idList所以Mapper接口中的方法这么写:
List selectByIds(List idList);

批量add数据

sql:insert into dept(name,location) values(?,?),(?,?),(?,?)
Mybatis单表 | 多表 | 动态sql 查询_第8张图片

批量delete数据

sql:delete from dept where id in (?,?,…) Mybatis单表 | 多表 | 动态sql 查询_第9张图片

update()的xml映射

解释:trim代替set可以防止在update的时候把已存在的信息给赋null了,这里用trim判断是否设置了更新的值才更新
prefix:前缀 suffixOverrides:删除后缀“,”,通常连用
test:实体类中的属性名
Mybatis单表 | 多表 | 动态sql 查询_第10张图片

今天刚学完Mybatis,发个文章记录一下吧

你可能感兴趣的:(mybatis,sql,数据库)