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

小结

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

你可能感兴趣的:(Java,Web学习跟踪笔记,mybatis,sql,java)