Mybatis-动态SQL、 <if>、<where>

发布于:2025-06-16 ⋅ 阅读:(21) ⋅ 点赞:(0)

一.动态SQL

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

二. <if>

                判断条件是否成立,如果条件为true,则拼接SQL

<select id="pageList" resultType="com.wyyzs.pojo.Emp">
        select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id
         <where>
             <if test="name != null and name != ''">
                 and e.name like concat('%', #{name}, '%')
             </if>
             <if test="gender != null">
                 and e.gender = #{gender}
             </if>
             <if test="begin != null">
                 and e.entry_date >= #{begin}
             </if>
             <if test="end != null">
                 and e.entry_date &lt; #{end}
             </if>
         </where>
        order by e.update_time desc

    </select>

三. <where>

        根据条件查询,来生成where关键字,并会自动去除条件前面多余的and或or,

        where标签只会智能的去除首个满足条件语句的前缀,所以建议在使用where标签时,每个语句都最好写上 and 前缀或者 or 前缀

<select id="pageList" resultType="com.wyyzs.pojo.Emp">
        select e.*, d.name deptName from emp e left join dept d on e.dept_id = d.id
         <where>
             <if test="name != null and name != ''">
                 and e.name like concat('%', #{name}, '%')
             </if>
             <if test="gender != null">
                 and e.gender = #{gender}
             </if>
             <if test="begin != null">
                 and e.entry_date >= #{begin}
             </if>
             <if test="end != null">
                 and e.entry_date &lt; #{end}
             </if>
         </where>
        order by e.update_time desc

    </select>

四. <foreach>

        1.属性说明

                (1) collection:集合名称

                (2) item:集合遍历出来的元素/项 

                (3) separator:每一次遍历使用的分隔符

                (4) open:遍历开始前拼接的片段,foreach 代码的开始符号,一般是 ”(“,和 close=“)” 合用。常用在 in(),values() 时。该参数可选

                (5) close:遍历结束后拼接的片段,foreach 代码的关闭符号,一般是 ”)“,和 open=“(” 合用。常用在 in(),values()时。该参数可选。

                (6) index:在 list 和数组中,index 是元素序号;在 map 中,index 是元素 key。该参数可选 

  <insert id="batchAddEmpExpr">
        insert into emp_expr(emp_id, begin, end, company, job) values
        <foreach collection="exprList" item="item" separator=",">
            (#{item.empId}, #{item.begin}, #{item.end}, #{item.company}, #{item.job})
        </foreach>
    </insert>


网站公告

今日签到

点亮在社区的每一天
去签到