什么是动态SQL?
动态SQL就是指根据不同的条件生成不同的SQL。
用来解决SQL拼接的难点。
创建一个基础工程
导包
编写配置文件
编写实体类
编写实体类对应Mapper接口和Mapper.XML文件
再输入一些数据
在输入的map中,3个param都有。
结果如下:

可以看到,只走了最上面的判断条件。
所以不同于Java中的switch case,没有break就会一溜的往下。
在choose when default中:会判断第一个成立的,然后break。
或者when都不成立,最后走otherwise。
set
set 元素会动态地在行首插入 SET 关键字,并会删掉额外的逗号
会在第一个判断成立时,在前面添加where,且去掉该第一个语句中的and。
如果什么都不传,那么这个where也不会产生。
where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。
所谓的动态SQL,本质还是SQL语句,只是我们可以在SQL层面增加逻辑代码。
Foreach collection item open seperator close
接口
Mapper.xml
测试
结果
有的时候,我们可能会将一些功能的公共部分抽取出来。
使用SQL标签抽取公共部分
在需要使用的地方使用include标签引用即可
将重复的代码抽取出为一个SQL片段,在需要的地方include。
动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了。
建议:
先在Mysql中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可!