•
动态
SQL
是
MyBatis
强大特性之一。极大的简化我们拼装
SQL
的操作。
•
动态
SQL
元素和使用
JSTL
或其他类似基于
XML
的文本处理器相似。
•
MyBatis 采用功能强大的基于 OGNL
的表达式来简化操作。
if标签
choose (when, otherwise)标签 (我感觉有点像switch-case)
where标签(实现where子句,并且可以去掉前面多余的and。注意and要写在前面才行)
下图按理说是不能去掉多余的and的。
set标签(实现update里面的set子句,可以去掉多余的,(逗号)。规则与where标签类似)
按理说,这里多余的,(逗号) 也是不能去除的。
trim标签(可以去除多余的and和逗号,比where和set更强大)
foreach标签(顾名思义,用来遍历集合的)
•动态 SQL 的另外一个常用的必要操作是需要对一个集合进行遍历,通常是在构建 IN 条件语句的时候。
•
当迭代列表、集合等可迭代对象或者数组
时,
index
是当前
迭代的次数
,
item
的值是本次
迭代获取的
元素
•
当使用字典(或者
Map.Entry
对象的集合)
时,
index
是
键
,
item
是
值
bind标签(用得不多)
•bind 元素可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如:
sql标签
mybatis中sql标签重要是为了避免在项目开发的过程中重复编写大量相同的sql语句。
通过使用sql将所有需要查询的字段封装起来,在编写select语句的时候就不需要每次都重复编写需要查询的字段了,只需要在查询语句中包含定义的sql语句即可 。
通过使用sql标签减少重复的sql语句,不仅可以减少我们的代码量,还更加方便我们查看!
//建立sql片段
<sql id="query_user_where">
<if test="id!=null and id!=''">
and id=#{id}
</if>
<if test="username!=null and username!=''">
and username like '%${username}%'
</if>
</sql>
//使用include引用sql片段
<select id="findUserList" parameterType="user" resultType="user">
select * from user
<where>
<include refid="query_user_where"/>
</where>
</select>
//引用其它mapper.xml的sql片段
<include refid="namespace.sql片段"/>