http://www.blogjava.net/diggbag/articles/mybatis.html
近日在公司项目中,使用到spring+mybatis的架构,特对mybatis的batch模式做了相关研究,得出以下结论:
1.Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,
并且批量执行所有更新语句,显然batch性能将更优;
2.但batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的;
3. 在测试中使用simple模式提交10000条数据,时间为18248 毫秒,batch模式为5023 ,性能提高70%;
4.通过走码和研读spring相关文件发现,在同一事务中batch模式和simple模式之间无法转换,由于本项目一开始选择了simple模式,所以碰到需要批量更新时,只能在单独的事务中进行;
5.在代码中使用batch模式可以使用以下方式:
//从spring注入原有的sqlSessionTemplate
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public void testInsertBatchByTrue() {
//新获取一个模式为BATCH,自动提交为false的session
//如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(
ExecutorType.BATCH, false);
//通过新的session获取mapper
fooMapper = session.getMapper(FooMapper.class);
int size = 10000;
try {
for (int i = 0; i < size; i++) {
Foo foo = new Foo();
foo.setName(String.valueOf(System.currentTimeMillis()));
fooMapper.insert(foo);
if (i % 1000 == 0 || i == size - 1) {
//手动每1000个一提交,提交后无法回滚
session.commit();
//清理缓存,防止溢出
session.clearCache();
}
}
} catch (Exception e) {
//没有提交的数据可以回滚
session.rollback();
} finally {
session.close();
}
}
6.上述代码没有使用spring的事务,改动手动控制,如果和原spring事务一起使用,将无法回滚,必须注意,最好单独使用;
分享到:
相关推荐
测试在单元测试中
mybatis配置及测试项目:主要包含mybatis环境包,mysql驱动包,日志文件配置及环境测试案例
springbatch mybatis
MyBatis 的一个测试例子 欢迎下载 。
Mybatis与JDBC批量插入MySQL数据库性能测试,资源包含文档、代码和数据库。
SpringBoot简单项目开发,适应初学者,整合mybatis,页面简单测试,数据Md5加密
Mybatis逆向工程,通过配置文件generatorConfig.xml配置连接数据库以及对应数据库表名称,执行GeneratorSqlmap类文件
MyBatis基础代码+单元测试(特好用)
springMVC+mybatis整合及测试(亲测可运行),亲测百分之百可以运行。
mybatis 对clob类型转换,解决clob类型数据插入数据库报异常问题
简单搭建一个spring+springMVC+Mybatis的项目。不完整,只是练习配置!
用来测试学习mybatis框架的,基本库应有尽有,想怎么开发,就怎么开发,不会提示缺少什么包的
mybatis 一对多性能优化 demo mybatis 一对多性能优化 demo
使用Idea工具建立的Maven工程,整合Spring和MyBatis,成功通过单元测试
springboot整合mybatis+测试生产环境,主要集成springboot+mybatis,由于生产测试开发有3个环境,整合到springboot,通过maven控制,maven install加入参数-pdev是开发环境-ptest是测试环境-pprod是生产环境
今天小编就为大家分享一篇关于MyBatis通过BATCH批量提交的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
基于Springboot+Mybatis打造接口自动化测试框架-全网最新最全最具技术含量的接口自动化测试及框架编写
mybatis映射测试文件,HAP测试,
Integration_2.rar(mybatis generator测试源码)
主要介绍了基于mybatis batch实现批量提交大量数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下