Spring+Mybatis如何处理大批量sql(for循环+批处理法)

如果只是单纯地将Mapper语句放在循环中,那么会为每次的循环都创建一个事务,导致大批量的sql耗时会很长。

如果我们让在同一个循环中的Mapper语句在一个事务中提交,批处理这些sql,不多次创建事务,那么我们就能极大地改善大批量sql的执行时间了。

代码如下:

java 复制代码
import com.hbnu.mapper.TestMapper;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class TestService {
    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    public void BatchDoSql(){
        //关闭自动提交,开启事务,即开启批处理
        SqlSession sqlSession= sqlSessionFactory.openSession(ExecutorType.BATCH,false);
        //获取Mapper映射
        TestMapper mapper=sqlSession.getMapper(TestMapper.class);
        try{
            for(int i=0;i<50000;i++){
                String data="test";
                mapper.insert(data);
            }
            sqlSession.commit();//将sql一次性提交
        }catch (Exception e){
            sqlSession.rollback();//回滚
            throw e;
        }
        sqlSession.close();
    }
}
相关推荐
廋到被风吹走2 小时前
【Spring】常用注解分类整理
java·后端·spring
QQ14220784493 小时前
没有这个数据库账户,难道受到了sql注入式攻击?
数据库·sql
一叶飘零_sweeeet3 小时前
吃透 Spring 体系结构
java·spring
勇往直前plus3 小时前
MyBatis/MyBatis-Plus类型转换器深度解析:从基础原理到自定义实践
数据库·oracle·mybatis
cyhysr3 小时前
sql将表字段不相关的内容关联到一起
数据库·sql
古城小栈3 小时前
Spring Boot 数据持久化:MyBatis-Plus 分库分表实战指南
spring boot·后端·mybatis
无名-CODING4 小时前
SQL 注入指南
sql·mybatis
Coder_Boy_4 小时前
Spring 核心思想与企业级最佳特性(实践级)事务相关
java·数据库·spring
甜鲸鱼6 小时前
【Spring AOP】操作日志的完整实现与原理剖析
java·spring boot·spring
计算机毕设指导66 小时前
基于Spring Boot的防诈骗管理系统【源码文末联系】
java·spring boot·后端·spring·tomcat·maven·intellij-idea