mybatisplus 批量修改
时间: 2023-09-02 20:05:44 浏览: 178
mybaitisplus修改
MybatisPlus提供了批量修改的功能,具体实现方式如下:
1. 创建实体类,包含需要修改的属性字段。
2. 创建Mapper接口,使用@Mapper注解标记接口。
3. 创建XML文件,在XML文件中编写批量修改的SQL语句。
4. 在Mapper接口中定义批量修改的方法,并使用@UpdateProvider注解标记方法。
5. 在实现类中编写批量修改的具体实现。
下面是一个示例代码:
```java
// 实体类
@Data
public class User {
private Long id;
private String name;
private Integer age;
}
// Mapper接口
@Mapper
public interface UserMapper extends BaseMapper<User> {
@UpdateProvider(type = BatchUpdateProvider.class, method = "updateAllColumnBatchById")
void updateAllColumnBatchById(@Param("list") List<User> list);
}
// XML文件
<update id="updateAllColumnBatchById">
<foreach collection="list" item="item" separator=";">
update user
<set>
name = #{item.name},
age = #{item.age}
</set>
where id = #{item.id}
</foreach>
</update>
// 实现类
public class BatchUpdateProvider {
public String updateAllColumnBatchById(Map<String, Object> map) {
List<User> list = (List<User>) map.get("list");
StringBuilder sb = new StringBuilder();
sb.append("<script>");
sb.append("update user ");
sb.append("<set>");
sb.append("name = case id ");
for (User user : list) {
sb.append("when ").append(user.getId()).append(" then ").append(user.getName()).append(" ");
}
sb.append("end, ");
sb.append("age = case id ");
for (User user : list) {
sb.append("when ").append(user.getId()).append(" then ").append(user.getAge()).append(" ");
}
sb.append("end ");
sb.append("where id in (");
for (User user : list) {
sb.append(user.getId()).append(",");
}
sb.deleteCharAt(sb.lastIndexOf(",")).append(")");
sb.append("</script>");
return sb.toString();
}
}
```
以上代码实现了根据ID批量修改用户的姓名和年龄,具体实现方式是使用了MybatisPlus提供的@UpdateProvider注解和自定义的BatchUpdateProvider类。在BatchUpdateProvider类中编写了批量修改的SQL语句,并使用StringBuilder拼接了需要执行的SQL语句,最终返回拼接好的SQL语句。在XML文件中,使用了foreach标签来循环遍历需要修改的用户列表,并使用update语句进行批量修改。在Mapper接口中定义了updateAllColumnBatchById方法,并使用@UpdateProvider注解标记了该方法,该方法的参数为需要修改的用户列表。
阅读全文