MyBatis 动态sql
2020-06-02 本文已影响0人
superNeil
000.jpg
一、定义
MyBatis 的 强大特性之一无疑是它的动态 sql .
那我们来看看 重点 列举这几个 :
二、动态 SQL 之 if 和 where
这个其实 我们之前在 做 高级查询的时候 就已经 有使用过的了 .
1.需求 : 查询工资大于等于某个值的员工
<select id="queryByMinSalary" resultType="Employee">
SELECT id, name, sn, salary, deptId FROM employee
<if test="minSalary != null">
WHERE salary >= #{minSalary}
</if>
</select>
2.需求 : 按照工资范围查询员工
<select id="queryByMinSalaryAndMaxSalary" resultType="Employee">
SELECT id, name, sn, salary, deptId FROM employee
<where>
<if test="minSalary != null">
AND salary >= #{minSalary}
</if>
<if test="maxSalary != null">
AND salary <= #{maxSalary}
</if>
</where>
</select>
三、动态SQL之 set
set 元素会动态前置 SET 关键字,同时也会删掉无关的逗号,若里面条件都不成立,就会去除 SET 关键
字。其用来解决更新时丢失数据的问题。
<update id="update">
UPDATE employee
<set>
<if test="name != null">
name = #{name},
</if>
<if test="sn != null">
sn = #{sn},
</if>
<if test="salary != null">
salary = #{salary},
</if>
<if test="deptId != null">
deptId = #{deptId},
</if>
</set>
WHERE id = #{id}
</update>
四、动态SQL之 foreach
动态 SQL 的另外一个常用的操作需求是对一个集合进行遍历,通常是在构建 IN 条件语句的时候,这里
就会使用到 foreach 元素。
1.需求 : 批量地根据员工 id 删除员工。
<delete id="batchDelete">
DELETE FROM employee WHERE id IN
<!--
collection 遍历数组或集合的 key 或者属性名
open 遍历开始拼接的字符串
index 遍历索引
item 遍历元素
separator 每遍历元素拼接字符串
close 遍历结束拼接字符串
-->
<foreach collection="ids" open="(" item="id" separator="," close=")"> #{id}
</foreach>
</delete>