天天看点

动态SQL

什么是动态SQL?

动态SQL就是指根据不同的条件生成不同的SQL。

用来解决SQL拼接的难点。

创建一个基础工程

导包

编写配置文件

编写实体类

编写实体类对应Mapper接口和Mapper.XML文件

再输入一些数据

在输入的map中,3个param都有。

结果如下:

动态SQL

可以看到,只走了最上面的判断条件。

所以不同于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

有的时候,我们可能会将一些功能的公共部分抽取出来。

使用SQL标签抽取公共部分

在需要使用的地方使用include标签引用即可

将重复的代码抽取出为一个SQL片段,在需要的地方include。

动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式,去排列组合就可以了。

建议:

先在Mysql中写出完整的SQL,再对应的去修改成为我们的动态SQL实现通用即可!