概述
ifchoose、when和otherwise元素trim、where和set元素foreach元素bind元素
概述Mybatis的动态sql包括以下几种元素:
| 元素 | 作用 | 备注 |
|---|---|---|
| if | 判断语句 | 单条件分支判断 |
| choose(when,otherwise) | 相当于java中的switch和case语句 | 多条件分支判断 |
| trim(where,set) | 辅助元素,用于处理特定的sql拼装问题,比如去掉多余的and、or等。 | 用于处理sql拼装的问题 |
| foreach | 循环语句 | 在sql的in语句中常用 |
动态SQL实际使用的元素并不多,但是它们带来了灵活性,在减少许多工作量的同时,很大程度上提高了程序的可读性和可维护性。
ifif元素是最常用的判断语句,相当于Java中的if语句,它常常与test属性联合使用。
choose、when和otherwise元素select id, user_name, note from user where 1=1 and user_name like concat('%', #{name}, '%')
有这样一个场景:
1.如果编号不为空,则只用编号作为条件查询。
2.如果编号为空,则名称不为空,则用名称作为条件进行模糊查询。
3.如果编号和名称都为空,则要求备注不为空。
trim元素意味着要去掉一些特殊的字符串,prefix 代表语句的前缀,prefixOvrrides代表需要去掉的字符串。上面的写法与where基本是等效的。
foreach元素update role where id = #{id} name = #{roleName}, note = #{note}
Foreach元素是一个循环语句,它的作用是遍历集合,它能够很好地支持数组和List、Set接口的集合,对此提供遍历功能。它往往用于SQL中的in关键字。
collection 配置的是传递进来的参数名称,它可以是数组、List、 Set 等集合。item配置的是循环中当前的集合成员名称。
index配置的是当前集合成员在集合的位置下标。
open和close配置的是将这些集合成员包装起来的符号。
separator是各个元素的间隔符。
在进行模糊查询时,如果使用MySQL数据库,那么用到的常常是concat函数,需要将“%” 和参数做字符串连接。如果使用Oracle数据库,则用连接符号“||",这样SQL需要提供两种实现形式。但是有了bind元素,就不必使用数据库的语言,只需使用MyBatis的动态SQL即可完成。
这里的“parameter ” 代表传递进来的参数,它和通配符(%)连接后被赋给了变量“pattern”,然后就可以在select语句中使用这个变量进行模糊查询了。无论是MySQL还是Oracle都可以使用这样的语句,提高代码的可移植性。



