美文网首页
MyBatis 动态sql

MyBatis 动态sql

作者: superNeil | 来源:发表于2020-06-02 18:39 被阅读0次
    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>
    

    相关文章

      网友评论

          本文标题:MyBatis 动态sql

          本文链接:https://www.haomeiwen.com/subject/yfdpzhtx.html