MyBatis批量更新之CASE WHEN方式详解
一、CASE WHEN批量更新原理
CASE WHEN方式是MyBatis实现批量更新的一种高效方案,其核心思想是通过构建一条包含多个条件分支的SQL语句,实现对不同记录的不同字段值进行一次性更新。
工作原理
- 构建一条UPDATE语句
- 对每个需要更新的字段使用CASE WHEN条件表达式
- 通过WHERE子句限定需要更新的记录范围
- 数据库引擎单次解析执行这条复杂SQL
二、完整实现示例
1. Mapper接口定义
public interface UserMapper {
void batchUpdateUsers(@Param("list") List<User> users);
}
2. XML映射文件配置
<update id="batchUpdateUsers" parameterType="java.util.List">
UPDATE user_table
SET
user_name = CASE user_id
<foreach collection="list" item="item">
WHEN #{item.userId} THEN #{item.userName}
</foreach>
END,
user_age = CASE user_id
<foreach collection="list" item="item">
WHEN #{item.userId} THEN #{item.userAge}
</foreach>
END,
update_time = CASE user_id
<foreach collection="list" item="item">
WHEN #{item.userId} THEN #{item.updateTime}
</foreach