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();
    }
}
相关推荐
Code季风几秒前
SQL关键字快速入门:HAVING 分组后的条件过滤
数据库·sql·mysql
chanalbert几秒前
从单体到微服务:Spring Cloud 开篇与微服务设计
spring boot·spring·spring cloud
天天摸鱼的java工程师20 分钟前
MyBatis Plus 的实用技巧:从业务场景到代码实现
java·后端·mybatis
不会Java怎么找女朋友39 分钟前
Spring注解驱动开发
spring
wuxuanok1 小时前
Web后端开发-Mybatis
java·开发语言·笔记·学习·mybatis
netyeaxi12 小时前
Java:使用spring-boot + mybatis如何打印SQL日志?
java·spring·mybatis
小七mod12 小时前
【MyBatis】MyBatis与Spring和Spring Boot整合原理
spring boot·spring·mybatis
星辰离彬13 小时前
Java 与 MySQL 性能优化:Java应用中MySQL慢SQL诊断与优化实战
java·后端·sql·mysql·性能优化
程序猿小D15 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的个人财务管理系统,推荐!
java·数据库·mysql·spring·毕业论文·ssm框架·个人财务管理系统
zhuiQiuMX15 小时前
脉脉maimai面试死亡日记
数据仓库·sql·面试