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();
    }
}
相关推荐
lkbhua莱克瓦2423 分钟前
进阶-存储过程3-存储函数
java·数据库·sql·mysql·数据库优化·视图
heartbeat..2 小时前
零基础学 SQL:DQL/DML/DDL/DCL 核心知识点汇总(附带连接云服务器数据库教程)
java·服务器·数据库·sql
阿湯哥3 小时前
Spring AI Alibaba 实现 Workflow 全指南
java·人工智能·spring
23zhgjx-zgx4 小时前
SQL注入攻击分析报告
网络·sql·ctf
heartbeat..4 小时前
SQL 常用函数大全:聚合、字符串、数值、日期、窗口函数解析
java·数据库·sql·函数
萧曵 丶5 小时前
Spring Cloud Alibaba 详解
spring·spring cloud
szm02255 小时前
Spring
java·后端·spring
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ7 小时前
sql 如果字段为空就用另一个字段
数据库·sql
萧曵 丶7 小时前
Spring 全套高频面试题(由浅到深 完整版)
java·后端·spring
stillaliveQEJ7 小时前
【MyBatis】resultType踩坑实录
mybatis