-
Notifications
You must be signed in to change notification settings - Fork 74
Open
Description
我像使用mybatis的批量插入、更新方式时,发现不能成功(如下),因为batchSqlSession.getMapper(mapperClass);获取不到,有什么方式能获取到或者其他方式实现类似这种的批量操作吗(不使用sql语句拼接)?随便问下新版本有计划什么时候发布吗?
public <T, U, R> int batchUpdateOrInsert(List data, Class mapperClass, BiFunction<T, U, R> function) {
int count = 1;
SqlSession batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
try {
U mapper = batchSqlSession.getMapper(mapperClass);
int size = data.size();
for (T element : data) {
function.apply(element, mapper);
if ((count % BATCH_SIZE == 0) || count == size) {
batchSqlSession.flushStatements();
}
count++;
}
// 非事务环境下强制commit,事务情况下该commit相当于无效
batchSqlSession.commit(!TransactionSynchronizationManager.isSynchronizationActive());
} catch (Exception e) {
LogUtils.error(e, log, "MybatisBatchUtils处理异常");
batchSqlSession.rollback();
throw BusinessException.newInstance("批量插入错误");
} finally {
batchSqlSession.close();
}
return count - 1;
}
Metadata
Metadata
Assignees
Labels
No labels