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();
    }
}
相关推荐
曹天骄19 分钟前
mybatis-plus+springboot3项目实现分页
mybatis
周小闯1 小时前
Easyliev在线视频分享平台项目总结——SpringBoot、Mybatis、Redis、ElasticSearch、FFmpeg
spring boot·redis·mybatis
Joeysoda2 小时前
JavaEE进阶(2) Spring Web MVC: Session 和 Cookie
java·前端·网络·spring·java-ee
曹二7473 小时前
Spring-事务
数据库·spring·oracle
时雨h4 小时前
芋道源码 —— Spring Boot 缓存 Cache 入门
java·后端·spring
TsuanS5 小时前
SQL 注入 (C++向)
数据库·c++·sql
blammmp5 小时前
Java EE 进阶:Spring MVC(2)
spring·java-ee·mvc
豪门土狗6 小时前
渗透测试之利用sql拿shell(附完整流程+防御方案)【上】
数据库·笔记·sql·网络安全
Nijika...7 小时前
libilibi项目优化(1)使用Redis实现缓存
java·数据库·redis·后端·spring·缓存
远川_Horizon10 小时前
Lab17_ Blind SQL injection with out-of-band data exfiltration
sql·web安全