MyBatis Plus 3.3 批量修改
时间: 2023-08-14 20:12:54 浏览: 131
MyBatis Plus 3.3 提供了批量修改的功能,可以使用 UpdateWrapper 来完成。下面是一个示例代码:
```java
List<Integer> ids = Arrays.asList(1, 2, 3, 4, 5);
int age = 20;
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.in("id", ids);
updateWrapper.set("age", age);
int rows = userMapper.update(null, updateWrapper);
```
上面的代码中,我们定义了一个 List<Integer> ids 和一个 int age,表示要将 id 在 ids 列表中的用户的年龄修改为 age。然后,我们使用 UpdateWrapper 构建一个更新条件,指定要更新的字段和更新的值,然后调用 userMapper.update 方法执行更新操作。注意,第一个参数传入 null 表示更新所有符合条件的记录。
需要注意的是,批量修改操作只支持基本类型和包装类型,不支持复杂类型。如果需要修改复杂类型,可以使用自定义的 SQL 语句来实现。
相关问题
mybaits plus 3.5 的default boolean updateBatchById(Collection<T> entityList) { return Db.updateBatchById(entityList); } 改成 mybatis plus 3.3的写法
MyBatis Plus 3.3 中没有 Db.updateBatchById(Collection<T> entityList) 这个方法,因此也没有相应的默认实现。但是,我们可以手动实现一个类似的方法,以达到相同的效果。
下面是一个可能的实现:
```
public boolean updateBatchById(List<T> entityList) {
if (CollectionUtils.isEmpty(entityList)) {
return false;
}
int rows = 0;
for (T entity : entityList) {
rows += this.updateById(entity);
}
return rows == entityList.size();
}
```
这个方法的实现比较简单,就是遍历实体列表,逐个调用 updateById 方法更新数据库,并统计更新成功的行数。最终,如果更新成功的行数等于实体列表的大小,就说明批量更新操作成功,否则就失败。
需要注意的是,这个实现方式可能会对数据库造成较大的压力,因为它需要执行多条 SQL 语句,而且每个 SQL 语句都需要与数据库建立连接、执行、关闭连接等操作。因此,在批量更新数据时,应该尽量减少 SQL 语句的数量,以提高效率和性能。
阅读全文