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();
    }
}
相关推荐
一刀到底2112 小时前
spring+tomcat 用户每次发请求,tomcat 站在线程的角度是如何处理用户请求的,spinrg的bean 是共享的吗
java·spring·tomcat
重整旗鼓~2 小时前
2.微服务-配置
java·spring·微服务
zeijiershuai2 小时前
Mybatis-入门程序、 数据库连接池、XML映射配置文件、MybatisX
xml·java·开发语言·mybatis
小手WA凉2 小时前
Gradle快速入门
java·spring·gradle
Le_ee3 小时前
sqli-labs第十四关——“POST报错注入
数据库·sql·mysql
白嫖不白嫖3 小时前
深入解析SQL窗口函数
sql
设计师小聂!6 小时前
Seata分布式事物案例及详解
java·spring·spring cloud
好奇的菜鸟7 小时前
MyBatis-Plus 中 QueryWrapper 的 Limit 实现
java·tomcat·mybatis
l_tian_tian_7 小时前
SpringCloud——MybatisPlus
java·spring boot·mybatis
王蛋1117 小时前
后端环境配置
java·spring·maven