MyBatis -- 动态SQL(if、trim、where、set、choose(where、otherwise)、foreach)
一、动态SQL
1、基于OGNL表达式
2、完成多条件查询等逻辑实现
3、用于实现动态SQL的元素主要有
- if
- trim
- where
- set
- choose(where、otherwise)
- foreach
二、if元素 (改造查询用户信息列表的演示示例)
根据用户角色(userRole)和用户姓名(模糊查询)进行查询
if做非空判断
where根据sql,自动添加where,根据条件动态添加/删除and、or
mapper.xml文件
Test类
运行代码结果:
三、set元素(用户表的修改操作 if + set)
set:会根据sql,自动的添加上set 还会动态去除逗号
mapper.xml文件
Test类
运行代码结果:
数据库中的用户信息发送改变
四、trim元素(用户表的查询操作 if + trim)
1、属性:
- prefix:添加前缀
- suffix:添加后缀
- prefixOverrides:删除前缀
- suffixOverrides:删除后缀
2、更灵活地去除多余关键字
3、替代where和set
使用trim替换where 和 set
mapper.xml文件
1、查询用户 替代where
Test类
运行代码结果:
2、修改用户 trim替代set
Test类
运行代码结果:
数据库信息已修改
五、choose(where、otherwise)用户表的查询操作
相当于Java中有switch语句
当when有条件满足的时候,就跳出choose
mapper.xml
Test类
运行代码结果:
五、foreach (获取多参数下用户列表)
1、foreach
- collection 循环的类型
- 数组 array
- list list
- map map的key
2、item 别名
3、open 起始符合
4、end 结束位置符号
5、index 下标
6、separator 分隔符
//select * from smbms_user where id in(1,2,5)
//等同于 select * from smbms_user where id = 1 or id = 2 or id = 5
传参:
1、数组传参
2、list传参
3、map传参
Test类