MySQL when-case语句
语法:
CASE
WHEN THEN
WHEN THEN
…
[ELSE ]
END CASE ;
- 示例:
UPDATE categories SET
level = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)
上面代码中的where语句的作用:
- 提高sql执行的效率
- 不加的话会设计其它记录的level字段的值为null,需要注意
- 示例:
UPDATE categories SET
level= CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'Java'
WHEN 2 THEN 'Python'
WHEN 3 THEN 'C#'
END
WHERE id IN (1,2,3)
MyBatis批量更新
- Mapper文件
int updateDeptLocs(@Param("depts")List DeptList);
- 对应的映射文件:
UPDATE tb_category SET level =
when deptno = #{item.deptno} then #{item.loc}
WHERE deptno IN
#{item.deptno,jdbcType=INTEGER}
- 测试代码:
@Test
void updateDeptLocs(){
List list =new ArrayList();
list.add(new Dept(10,"Research", "北京"));
list.add(new Dept(10,"Sales", "南京"));
int res = deptMapper.updateDeptLocs(list);
System.out.println(res);
}
- 生成的SQL:
UPDATE tb_category SET LEVEL =
CASE
WHEN id =10 THEN '北京'
WHEN id = 30 THEN '东市'
END
WHERE id IN (10, 30);