mybatis 批量插数据
时间: 2023-09-25 10:06:07 浏览: 81
MyBatis 提供了两种方式来批量插入数据:
1. 使用 foreach 循环插入数据
在 XML 映射文件中,使用 foreach 循环将数据插入到数据库中。示例代码如下:
```
<insert id="batchInsert" parameterType="java.util.List">
insert into user (id, name, age) values
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.name}, #{item.age})
</foreach>
</insert>
```
在 Java 代码中,将要插入的数据封装为 List,然后调用 MyBatis 的批量插入方法即可:
```
List<User> userList = new ArrayList<>();
// 添加数据到 userList 中
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
try {
for (User user : userList) {
userMapper.insert(user);
}
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}
```
2. 使用 MyBatis 批量插入方法
MyBatis 提供了批量插入方法,可以一次性插入多条数据。示例代码如下:
```
<insert id="batchInsert" parameterType="java.util.List">
insert into user (id, name, age) values
<foreach collection="list" item="item" separator=",">
(#{item.id}, #{item.name}, #{item.age})
</foreach>
</insert>
```
在 Java 代码中,将要插入的数据封装为 List,然后调用 MyBatis 的批量插入方法即可:
```
List<User> userList = new ArrayList<>();
// 添加数据到 userList 中
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
try {
userMapper.batchInsert(userList);
sqlSession.commit();
} catch (Exception e) {
sqlSession.rollback();
} finally {
sqlSession.close();
}
```
需要注意的是,批量插入方法需要在 MyBatis 的配置文件中配置批量插入的语句和批量插入的数量。例如:
```
<configuration>
<settings>
<setting name="jdbc.batch.size" value="100"/>
</settings>
</configuration>
```
这里配置了批量插入的数量为 100 条数据。如果要插入的数据超过了这个数量,就会把数据分成多个批次插入。
阅读全文