Mybatis批量插入oracle
时间: 2023-10-12 18:15:20 浏览: 93
MyBatis 支持批量插入操作,其实现原理是通过 JDBC 的 addBatch 和 executeBatch 方法来实现的。下面是一个基于 Oracle 数据库的批量插入示例:
首先,我们需要在 MyBatis 的 XML 配置文件中定义一个批量插入的 SQL 语句:
```xml
<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>
```
注意,这里使用了 MyBatis 的 foreach 标签来循环插入每一条数据。
然后,在 Java 代码中,我们可以使用 SqlSession 的批量插入 API 来执行批量插入操作:
```java
List<User> userList = new ArrayList<>();
// 创建多个 User 对象,并添加到 userList 中
try (SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH)) {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
int batchCount = 1000; // 每批提交的数量
int batchIndex = 0;
for (int i = 0; i < userList.size(); i++) {
User user = userList.get(i);
userMapper.insert(user);
batchIndex++;
if (batchIndex == batchCount || i == userList.size() - 1) {
sqlSession.flushStatements();
sqlSession.clearCache();
batchIndex = 0;
}
}
sqlSession.commit();
}
```
这里我们使用了 ExecutorType.BATCH 执行器类型,同时设置了每批提交的数量 batchCount。在循环插入数据时,每当插入的数量达到 batchCount 或者是插入完成时,就会执行 sqlSession.flushStatements() 来提交批量插入操作。同时,为了避免内存溢出,我们在每批提交后都要执行 sqlSession.clearCache() 来清空缓存。最后,记得要执行 sqlSession.commit() 来提交所有的批量插入操作。
阅读全文