oracle使用Mybatis百万级高效批量插入使用批处理
时间: 2023-10-07 16:08:27 浏览: 157
Mybatis数据批量插入如何实现
Oracle数据库使用MyBatis进行高效的百万级批量插入可以使用批处理操作,以下是实现步骤:
1. 配置MyBatis的批处理属性:
在MyBatis的配置文件中添加以下属性:
```
<settings>
<setting name="jdbcTypeForNull" value="NULL" />
<setting name="cacheEnabled" value="true" />
<setting name="lazyLoadingEnabled" value="true" />
<setting name="aggressiveLazyLoading" value="false" />
<setting name="multipleResultSetsEnabled" value="true" />
<setting name="useColumnLabel" value="true" />
<setting name="useGeneratedKeys" value="false" />
<setting name="autoMappingBehavior" value="PARTIAL" />
<setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
<setting name="defaultExecutorType" value="SIMPLE" />
<setting name="defaultStatementTimeout" value="25000" />
<setting name="defaultFetchSize" value="100" />
<setting name="safeRowBoundsEnabled" value="false" />
<setting name="mapUnderscoreToCamelCase" value="false" />
<setting name="localCacheScope" value="SESSION" />
<setting name="jdbcTypeForNull" value="NULL" />
<setting name="flushCacheEnabled" value="false"/>
<setting name="batch" value="true"/>
</settings>
```
其中,最后一行 `batch` 属性表示开启批处理模式。
2. 编写Mapper文件:
在Mapper文件中编写批量插入的SQL语句,例如:
```
<insert id="batchInsert" parameterType="java.util.List">
insert into user (id, name, age) values
<foreach collection="list" item="user" separator=",">
(#{user.id}, #{user.name}, #{user.age})
</foreach>
</insert>
```
其中,`parameterType` 指定了传入参数的类型为 `List`,`foreach` 标签表示对传入的List进行遍历,生成批量插入的SQL语句。
3. 编写Java代码:
在Java代码中使用MyBatis的 `SqlSession` 对象执行批量插入操作,示例如下:
```
SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = new ArrayList<>();
// 添加一百万条测试数据
for (int i = 0; i < 1000000; i++) {
User user = new User();
user.setId(i+1);
user.setName("user"+i);
user.setAge(20+i);
userList.add(user);
}
userMapper.batchInsert(userList);
sqlSession.commit();
```
其中,`SqlSessionFactory` 是MyBatis的会话工厂对象,`UserMapper` 是Mapper接口对象,`userList` 是需要批量插入的数据列表,最后需要调用 `commit()` 方法提交事务。
这样,就可以使用MyBatis进行高效的百万级批量插入操作了。
阅读全文