mybatis 之动态 SQL
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis 之动态 SQL相关的知识,希望对你有一定的参考价值。
1、动态 SQL 简介:
动态 SQL 是 MyBatis 强大特性之一。极大的简化我们拼装 SQL 的操作。
动态 SQL 元素和使用 JSTL 或者其他类似基于 XML 的文本处理器相似。
MyBatis 采用功能强大的基于 OGNL 的表达式来简化操作。
- if
- choose(when,otherwise)
- trim(where,set)
- foreach
2、if:判断(要求是携带了哪个字段查询条件,就带上这个字段的值):
a、创建一个 EmployeeMapperDynamicSQL 接口,并且在这个接口中提供一个 getEmpsByCondictionIf 方法。(该方法中提供一个 Employee 的参数)在EmployeeMapperDynamicSQL.xml 文件中添加 select 标签,并提供相应的 where 子标签和 if 标签的设置。
b、可以看到下图的输出结果中,传入的参数是动态变动的。(下图的 sql 语句 会随着传入的对象属性值的不同而发生相应的改变)
注:如果第一个 参数不存在,where 标签会在 sql 第二个的参数 and 去掉。
2、trim:自定义输出 sql 字符串的截取规则:
- prefix="" :在trim 标签中输出的字符串添加前缀字符。
- suffixOverrides="" :在 trim 标签中输出的字符串删除指定的前缀字符。
- suffix="" :在trim 标签中输出的字符串添加后缀字符。
- prefixOverrides="":在 trim 标签中输出的字符串删除指定的后缀字符。
注:可以看到,以上输出结果中,前缀的 where 字符串被添加,后缀的 and 被删除掉了。
3、choose(when)标签:相当于 javase 中的 switch-case 条件语句:
(有 id 属性值时以 id 查询,有 lastName 属性值时以 lastName 查询,只选其一。)
注:可以看到打印出来的 sql 语句中传入的实参为 "%i%"。
3、update、set 标签:用于更新操作:
a、在 EmployeeMapperDynamicSQL 接口中添加 updateEmp 方法,后在 EmployeeMapperDynamicSQL.xml 文件中添加 update 标签以及 set 子标签。
b、下图的输出结果中的 sql 语句中可以看到, last_name 后的 ,因为添加了 set 标签而被去掉, 并且在 tbl_employees 后添加了 set 字符串。
4、动态遍历集合:
a、在 EmployeeMapperDynamicSQL 中添加 getEmpsByConditionForeach 方法,并在 EmployeeMapperDynamicSQL.xml 文件中设置 select 标签。
- foreach 标签:循环遍历属性值
* collection 属性:指定要遍历的集合。list 类型的参数会特殊处理封装在 map 中,map 的 key 就叫 list
* item:将当前遍历出的元素赋值给指定的变量
* separator:每个元素之间的分隔符
* open:遍历出的结果字符串前加上的开始字符串
* close:遍历出的结果字符串前加上的最后字符串
* index:遍历 list 的时候,index 就是索引,item 就是当前值
遍历 map 的时候,index 表示 map 的 key,item 就是当前值
b、如下图的输出的 sql 语句,会随着集合的元素数量的不同动态修改 in 后的字符串。
5、批量保存:使用 foreach 标签:
a、在 EmployeeMapperDynamicSQL 接口中添加 addEmps 方法,并在 EmployeeMapperDynamicSQL.xml 文件中设置 insert 标签以及 foreach 子标签。
b、下图的输出结果中可以看到,批量插入成功。
附:
1、mybatis 中的两个内置参数:
_parameter:代表整个参数
单个参数:_parameter 就是这个参数
多个参数:参数会被封装到一个 map中:_parameter 就是代表这个 map
_databaseId:如果配置了 databaseIdProvider 标签,_databaseId 就是代表当前数据库的别名 oracle。
2、抽取可重用的 sql 片段,方便后面引用:
sql 抽取:经常要查询的列名,或者插入用的列名(抽取出来方便使用)
include 来引用已经抽取的 sql
本文出自 “12392717” 博客,请务必保留此出处http://12402717.blog.51cto.com/12392717/1932126
以上是关于mybatis 之动态 SQL的主要内容,如果未能解决你的问题,请参考以下文章