Mybatis批量更新数据库 MybatisBatchUtils batchInsertupdate spring boot
批量更新数据库 MybatisMybatisBatchUtilsint cnt = mybatisBatchUtils.batchUpdateOrInsert(addList, UiConfigDetailMapper.class,(item, uiConfigDetailMapper) -> uiConfigDetailMapper.insertSelective(item));packa
·
批量更新数据库 Mybatis
MybatisBatchUtils
int cnt = mybatisBatchUtils.batchUpdateOrInsert(addList, UiConfigDetailMapper.class,
(item, uiConfigDetailMapper) -> uiConfigDetailMapper.insertSelective(item));
package cn.XXX.dao.serivce.common;
import com.XXX.doctorusercenter.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.List;
import java.util.function.BiFunction;
@Slf4j
@Component
public class MybatisBatchUtils {
/**
* 每次处理1000条
*/
private static final int BATCH_SIZE = 1000;
@Resource
private SqlSessionFactory sqlSessionFactory;
/**
* 批量处理修改或者插入
*
* @param data 需要被处理的数据
* @param mapperClass Mybatis的Mapper类
* @param function 自定义处理逻辑
* @return int 影响的总行数
*/
public <T, U, R> int batchUpdateOrInsert(List<T> data, Class<U> mapperClass, BiFunction<T, U, R> function) {
int i = 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 ((i % BATCH_SIZE == 0) || i == size) {
batchSqlSession.flushStatements();
}
i++;
}
// 非事务环境下强制commit,事务情况下该commit相当于无效
batchSqlSession.commit(true);
} catch (Exception e) {
batchSqlSession.rollback();
// throw new BusinessException(e.getMessage());
log.error("batchUpdateOrInsert", e);
} finally {
batchSqlSession.close();
}
return i - 1;
}
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)