MyBatis(二)动态sql
1.使用mavne管理项目
pom文件如下
2.用户表
简简单单一张表,所有操作都围绕着此表进行,其中userTime是datetime类型

3.需要的配置文件以及dao层接口以及dao接口
mapper映射文件和接口放在同一个包下,

log4j.properties 帮助我们打印日志信息,还能看到语句执行过程

接口方法
List
List
List
List
List
void updateUser(User user);
4.动态sql之where节点
语句里的where标签的内容如果有效会自动给sql语句加上where关键字,通常和if标签来一起使用
where内的include标签引用了外部sql的if标签,写在外面,那么所有的语句都能利用include节点来使用这个sql。

如果传入的user对象中未给id赋值或者赋为空,那么就查询所有,如果不为空且不为0,就查询对应id的user信息


赋为1,只会查询出一条信息

5.动态sql之多个参数
对于多个参数如何使用
如果使用之前的写法,确实可以执行,但是一旦其中一个参数为空,就会出现不同的情况(与预期相违背),我们来使用动态sql优化

测试,第一个参数传空字符串,第二个传值,会发现查询出来了,说明mybatis帮我们去掉了or关键字,还是非常方便

如果第一个参数传值,第二个参数为空呢

6.动态sql之choose、otherwise
choose和otherwise一般一起使用,也用作条件,类似于switch语句,传什么值,执行对应的行为


测试,date不为空,小于当前时间的都会查询

id不为空,只根据对应的id值

如果都为空,会执行otherwise里面的语句

如果都不为空,会按照次序,也就是choose语句的顺序,所以会按照id来查询

7.动态sql之foreach
主要和sql语句in关键字一起使用,用来生成in的数据

属性:collection : 集合类型
open="(" 左括号开始
close=")" 右括号结束
separator="," 值与值之间以逗号分隔
item="item" 代表集合里的值
参数使用list集合,传值

如果使用map集合作为参数呢,使用map集合,可以不用添加参数类型属性
foreach中的集合类型可以使用entrySet(键值对)集合。
_parameter是没有指定参数名时候的默认参数名,_parameter获取所有的entrySet(键值对的集合)
然后,就是foreach中的属性,此时index是键,item是value
然后 使用
${} #{} 都可将id取出

测试,取index时,可以看到,所有的key都被取出来了,并且成功拼接

取item,取出了所有的cvalue,并且成功拼接

如果是数组呢,不需要参数类型,只需要将集合类型改为array即可,然后利用# $取值

浙公网安备 33010602011771号