MyBatis-动态SQL-if-案例

案例

  • 完善更新员工的功能,修改为动态更新员工数据信息
  • 原代码如下:
  •     @Update("update emp\n" +
                "set username   = #{username},\n" +
                "    name=#{name},\n" +
                "    gender=#{gender},\n" +
                "    image=#{image},\n" +
                "    job=#{job},\n" +
                "    entrydate=#{entrydate},\n" +
                "    dept_id=#{deptId},\n" +
                "    update_time=#{updateTime}\n" +
                "where id = #{id};")
        public void Update(Emp emp);
  •     @Test
        public void testUpdate() {
            Emp emp = new Emp();
            emp.setId(18);
            emp.setUsername("TOM");
            emp.setName("汤姆");
            emp.setGender((short) 1);
            emp.setImage("1.jpg");
            emp.setUpdateTime(LocalDateTime.now());
    
            empMapper.Update(emp);
        }
  • 上述代码存在的问题时,当只更新部分信息时,未复制的属性值不会保持未原来的数据,而是会变为null值

  • 完善后的代码如下:

  •         update emp
            <set>
                <if test="name!=null">name =#{name},</if>
                <if test="username!=null">username=#{username},</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">update_time=#{updateTime}</if>
            </set>
            where id = #{id}
  • 这样就可以保证在更新需要更新的数据的同时,保留未更新的数据,并且上述代码使用了<set>标签,会自动设置删除SQL语句中的多余的,。

小结

  • <if>
    • 用于判断条件是否成立,如果条件为true,则拼接SQL
    • 形式<if test="判断条件">...</if>
  • <where>
    • where元素只会在子元素有内容的情况下才插入where子句,而且会自动去除子句开头的and或者or
  • <set>
    • 动态地在行首插入SET关键字,并且会删除额外地逗号。(用于update语句中)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值