Mybatis-动态SQL

遇见
2023-05-18 / 0 评论 / 93 阅读 / 正在检测是否收录...

随着用户的输入或外部条件的变化而变化的SQL语句,我们称为 动态SQL。

举例
<mapper namespace="com.itheima.mapper.EmpMapper">

    <sql id="commonSelect">
        select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time
        from emp
    </sql>

   <!-- 动态更新员工-->
    <update id="update2">
        update emp
        <set>
            <if test="username != null">username = #{username},</if>
            <if test="name != null">name = #{name},</if>
            <if test="gender != null">gender = #{gender},</if>
            <if test="image != null">image = #{image},</if>
            <if test="job != null">job = #{job},</if>
            <if test="entrydate != null">entrydate = #{entrydate},</if>
            <if test="deptId != null">dept_id = #{deptId},</if>
            <if test="updateTime != null">update_time = #{updateTime}</if>
        </set>
        where id = #{id}
    </update>

    <!--resultType: 单条记录封装的类型-->
    <select id="list" resultType="com.itheima.pojo.Emp">
        <include refid="commonSelect"/>
        <where>
            <if test="name != null">
                name like concat('%', #{name}, '%')
            </if>
            <if test="gender != null">
                and gender = #{gender}
            </if>
            <if test="begin != null and end != null">
                and entrydate between #{begin} and #{end}
            </if>
        </where>
        order by update_time desc
    </select>

    <!--批量删除员工 (18,19,20)-->
    <!--
        collection: 遍历的集合
        item: 遍历出来的元素
        separator: 分隔符
        open: 遍历开始前拼接的SQL片段
        close: 遍历结束后拼接的SQL片段
    -->
    <delete id="deleteByIds">
        delete  from emp where id in
        <foreach collection="ids" item="id" separator="," open="(" close=")">
            #{id}
        </foreach>
    </delete>

</mapper>
代码解读

if标签
用于判断条件是否成立,如果条件为true,则拼接SQL。
test属性为判断条件
形式:
where标签
where 元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句的开头的AND 或OR
set标签
动态地在行首插入 SET 关键字,并会删掉额外的逗号。(用在update语句中)
foreach标签
sql代码 delete from emp where id in (17,18,19);
collection: 遍历的集合
item: 遍历出来的元素
separator: 分隔符
open: 遍历开始前拼接的SQL片段
close: 遍历结束后拼接的SQL片段
SQL标签
实现sql片段的复用
属性id 可以理解为该片段的名字
include标签
引用SQL片段
属性refid的值为SQL标签的id

0

评论

博主关闭了所有页面的评论