动态SQL就是根据不同的条件生成不同的sql语句。所谓的动态sql,本质还是sql语句,只是我们在sql层面,去执行一个逻辑代码。动态sql就是拼接sql语句,我们只有保证sql正确性,按照sql的格式,去排列组合就可以了。
sql的内容是变化的, 可以根据条件获取到不同的sql语句.
主要是where部分发生变化。
动态sql的实现, 使用的是mybatis提供的标签
1 为什么需要动态SQL?
看一段Oracle存储过程代码:
由于前台传入的查询参数不同,所以写了很多的if else,还需要非常注意SQL语句里面的and、空格、逗号和转移的单引号这些,拼接和调试SQL就是一件非常耗时的工作。
MyBaits的动态SQL就帮助我们解决了这个问题,它是基于OGNL表达式的。
2 动态标签有哪些?
按照官网的分类,MyBatis 的动态标签主要有四类:
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
if标签-单条件判断
作用:筛选条件语句
dao层方法为:
public User findConditon(@Param("name")String name, @Param("email")String email);
choose标签 多条件分支判断
where语句
如果不使用where语句 就要在where其他判断语句前加入1=1 如 select * from tbl_user02 where 1=1加其他的if判断语句 如果我们不加入这个1=1就可以直接使用where语句 上面的choose和if都搭配使用 使用where 语句 可以自动消除第一个条件中的and 且加上where 例子如上面两个标签中即可
set标签
这个标签配合if标签一起用 一般用于修改语句 如果传递的参数为null 那么就不会修改该列的值
foreach标签
循环标签 适用于批量添加、删除 和查询记录