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();
    }
}
相关推荐
nj01283 小时前
Spring 循环依赖详解:三级缓存、早期引用、AOP 代理与懒加载
java·spring·缓存
Maiko Star8 小时前
让 AI 开口说话:Spring AI Alibaba 语音合成(TTS)实战
java·人工智能·spring·springai
冬天vs不冷9 小时前
面试必知必会(14):MySQL执行计划与SQL优化
sql·mysql·面试
KNeeg_9 小时前
黑马点评完整代码(RabbitMQ优化)+简历编写+面试重点 ⭐
java·redis·后端·spring·面试·职场和发展·黑马点评
铁皮哥9 小时前
【后端/Agent 开发】给你的项目配置一套 .claude/ 工作流:别再裸用 Claude Code 了!
java·windows·python·spring·github·maven·生活
1.14(java)13 小时前
Spring事务和事务传播机制
java·数据库·spring
Java成神之路-13 小时前
MyBatis工作原理
mybatis
lifewange15 小时前
afinfo 表设计
数据库·sql·mysql
Irene199115 小时前
SQL Developer 连接类型 (Connection Type) :SID 和 Service Name的区别
数据库·sql·连接方式
Java成神之路-16 小时前
Java SPI vs Spring SPI
java·spring