1. 概述
MyBatis中动态SQL包括元素:
元素 | 作用 | 备注 |
---|---|---|
if | 判断语句 | 单条件分支判断 |
choose(when、otherwise) | 相当于Java中的case when语句 | 多条件分支判断 |
trim(where、set) | 辅助元素 | 用于处理SQL拼接问题 |
foreach | 循环语句 | 用于in语句等列举条件 |
2. if元素
if元素是最常用的判断语句,常与test属性联合使用。
2.1 if
2.2 if + where
MyBatis中where标签会判断如果所包含的标签中有返回值,则插入一个‘where’。此外,如果标签返回的内容是以AND或OR开头,则自动删除开头的AND或OR。
2.3 if + set
UPDATE role WHERE id = #{id} role_name = #{roleName}, remark LIKE CONCAT('%', #{remark, jdbcType=VARCHAR}, '%')
上面形式,当ramark=null时,动态SQL语句会由于多出一个“,”而错误。
3. choose(when,otherwise)元素
4.trim元素
4.1 trim:if + where
4.2 trim:if + set
UPDATE role WHERE id = #{id} role_name = #{roleName}, remark LIKE CONCAT('%', #{remark, jdbcType=VARCHAR}, '%')
5. foreach元素
foreach元素是一个循环语句,作用是遍历集合,支持遍历数组、List、Set接口的集合。
import org.apache.ibatis.annotations.Param;
ListfindByIds(@Param("ids") List ids);
其中,
collection:传入的参数名称,可以是一个数组、List、Set等集合
item:循环中当前的元素
index:当前元素在集合的位置下标
open和close:包裹集合元素的符号
separator:各个元素的间隔符
int insertBatch(Listlist);
INSERT role ( role_name ) VALUES ( #{item.roleName} )
6. bind元素
bind元素的作用是通过OGNL表达式去自定义一个上下文变量。
ListfindBySearchText(@Param("searchText") String searchText);
其中,
searchText:传入的参数名称