![](https://i-blog.csdnimg.cn/blog_migrate/2f2dbb84cb7ed79df21385b7e464d474.png)
动态sql的作用
- mybatis 动态 sql 可以让我们在 xml 映射文件内,以标签的形式编写动态 sql,完成逻辑判断和动态拼接 sql 的功能
动态sql标签
<if>
判断传入的值是否符合某种规则,比如是否不为空<foreach>
标签可以把传入的集合对象进行遍历,然后把每一项的内容作为参数传到 sql 语句中,里面涉及到 item(具体的每一个对象),index(序号),open(开始符),close(结束符),separator(分隔符)<choose> <when> <otherwise>
一组组合标签,作用类似于 Java 中的 switch、case、default,只有一个条件生效,也就是只执行满足的条件 when,没有满足的条件就执行 otherwise,表示默认条件<where>
标签可以用来做动态拼接查询条件,where 元素只会在子元素返回任何内容的情况下才插入 “where” 子句;若子句的开头为 “and” 或 “or”,where 元素也会将它们去除;当和 if 标签配合的时候,不用显示的声明类似 where 1=1 这种无用的条件<set>
功能与<where>
类似,主要用于更新操作,为了删除在 if 不符合判断条件下,多出来的 set 关键字和 “,”<trim>
标签主要用在当<where>
和<set>
标签不符合期望的时候,可以自定义返回内容
prefix
(前缀): 在标签内有内容时,在句首增加的字段,例如:where 或者 set
prefixOverrides
(去掉的第一个标记),例如:and | or
suffix
(后缀): 在标签内有内容时,在句尾增加的字段,例如:order by id
suffixOverriides
(去掉最后一个标记),例如:“,”<bind>
元素允许在 OGNL 表达式以外创建一个变量,并将其绑定到当前的上下文
动态sql原理
- 使用 OGNL 从 sql 参数对象中计算表达式的值,根据表达式的值动态拼接 sql,以此来完成动态 sql 的功能