动态SQL
什么是动态SQL: 动态SQL就是指根据不同的条件生成不同的SQL语句
动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了!
搭建环境
创建一个基础工程
1.导包
2.编写配置文件
3.编写实体类
4.编写实体类对应Mapper接口和Mapper.XML文件
创建一个博客表
编写一个博客实体类
编写博客的Mapper接口
创建对应接口的xml文件
在mybatis-config核心配置文件中注册这个Mapper接口
编写一个id的随机生成工具类
实体类中时间字段和数据库中时间字段名字不一致
在核心配置文件中配置该方法解决该问题(虽然对于后面操作不配也行,不影响 )
在Mapper接口中编写插入博客的方法
xml文件中编写对应的sql语句
编写测试类
插入四条博客数据
if标签测试
在Mapper接口中编写查询博客的方法
xml中对应的sql,if标签用来根据不同的参数情况拼接对应的sql,
也可把where也写成标签,更加优化,如果是第一个还会自动消除and,where条件都不满足,可以自动不加where
编写测试类,此时,map不加任何东西,也就是这里两个if都不走,相当于不拼接,查出所有四条
在map中添加一个title参数,则sql走title不空,后面拼接上and title = ?,查出一条文章名为Java如此简单的博客
choose标签
满足条件只走一个,不会走多个满足,多个满足,也只走第一个
编写查博客的choose方法
xml中编写内容title不空,直接就拼第一个sql,不走下面的when了,哪个when先满足,就只拼接哪个when里的sql
set标签测试
编写更新博客的方法
xml编写,利用set标签,可拼接更新的字段内容,当set中if满足的只有一个时,也会消除其后面多余的逗号
编写相应的测试类,因为我们在map中设置了title,和author的内容,所以在sql中也拼接了set标签中两个if的sql
如果我们只在map中添加title的内容,没加author的内容,则set标签中的第二个if不满足,则不走,sql只拼接第一个if中的sql,而且通过日志可以发现,它自动消除了其后面多余的逗号。
SQL片段
有的时候,我们可能会将一些功能的部分抽取出来,方便复用!
Foreach标签
编写查询1,2,3号博客的方法
编写对应的xml,该标签有点类似于遍历,ids是map中我们定义的一个集合,id,为集合里的一个元素,sql每次都拼接一个开始为“(”,内容为id=id值,且每次遍历的内容都用or连接,遍历所有结束后结束再连接一个“)”
编写测试类,在map中加入一个集合大小为2的ids,可以看到最后的sql拼接了两个id = ?,集合大小为多少,就会拼接几个