mybatis 批量更新
时间: 2023-06-28 22:08:36 浏览: 85
Mybatis批量更新三种方式的实现
5星 · 资源好评率100%
MyBatis 支持批量更新操作,可以通过 `update` 标签中的 `foreach` 元素来实现。
假设有一个 `User` 实体类,包含 `id` 和 `name` 属性,我们要批量更新多个用户的姓名,可以按照以下步骤操作:
1. 在 Mapper.xml 文件中添加一个 `update` 标签,设置 `id` 和 `parameterType` 属性:
```xml
<update id="batchUpdateUser">
<foreach collection="users" item="user" separator=";">
update user set name = #{user.name} where id = #{user.id}
</foreach>
</update>
```
2. 在 Java 代码中,调用 `SqlSession` 的 `update` 方法,传入 Mapper.xml 中定义的 `id` 和一个包含多个 `User` 对象的集合:
```java
List<User> userList = new ArrayList<>();
User user1 = new User(1, "Jack");
User user2 = new User(2, "Rose");
userList.add(user1);
userList.add(user2);
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
int rows = sqlSession.update("batchUpdateUser", Collections.singletonMap("users", userList));
sqlSession.commit();
}
```
在 Mapper.xml 文件中,`foreach` 元素的 `collection` 属性指定了传入的集合变量名,`item` 属性指定了在循环中使用的变量名,`separator` 属性指定了每个 SQL 语句之间的分隔符。
在 Java 代码中,`Collections.singletonMap` 方法将一个包含集合变量的 Map 对象作为参数传入,`SqlSession` 会自动将 Map 中的键值对传递给 Mapper.xml 中的 `foreach` 元素。在执行完 `update` 方法后,需要手动调用 `commit` 方法提交事务,否则更新操作不会生效。
阅读全文