Spring+Mybatis如何处理大批量sql(for循环+批处理法)
2023-12-13 09:42:29
如果只是单纯地将Mapper语句放在循环中,那么会为每次的循环都创建一个事务,导致大批量的sql耗时会很长。
如果我们让在同一个循环中的Mapper语句在一个事务中提交,批处理这些sql,不多次创建事务,那么我们就能极大地改善大批量sql的执行时间了。
代码如下:
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();
}
}
文章来源:https://blog.csdn.net/qq_63128300/article/details/134962863
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!