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 &gt;= #{minSalary} 
</if> 
<if test="maxSalary != null">
AND salary &lt;= #{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>
上一篇下一篇

猜你喜欢

热点阅读