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 Plus 在不同批量操作模式下的性能特性,为实际项目中的数据处理提供决策支持。在实际开发中,根据数据量、系统资源和业务需求选择合适的批量操作方式,可以有效地提升系统的...
在Mybatis中,批量插入可以通过SqlSession的batch()方法开启批处理模式,然后执行Mapper中的insert方法,最后调用flushStatements()来提交批处理队列。这种方式同样能减少网络通信和数据库的开销。 接下来,我们将...
【标题】"mybatis配置及测试项目"是一个涵盖了MyBatis框架配置、MySQL数据库驱动以及日志设置的实践性项目,旨在帮助用户理解和掌握MyBatis的使用方法。在这个项目中,你将学习如何配置MyBatis以连接到MySQL数据库,...
在IT行业中,Spring Batch 和 MyBatis 是两个非常重要的组件,它们在企业级应用开发中扮演着关键角色。Spring Batch 是一个用于处理批量数据的强大框架,而MyBatis 是一个灵活的持久层框架,它简化了数据库操作。...
总之,MyBatis通过BATCH模式提供的批量提交方法是一种非常实用且高效的解决方案,它能够显著提升批量数据库操作的性能。开发者们应当根据实际应用场景,合理设计批量操作的规模和事务管理机制,以达到最优的性能表现...
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...
MyBatis 测试例子详解 在本文中,我们将详细介绍如何使用 MyBatis 进行数据持久层的开发,包括数据库设计、MyBatis 配置文件的编写、Java 代码的编写等。 一、数据库设计 在本例中,我们使用 MySQL 作为数据库...
MyBatis-Batch 是一个 MyBatis 扩展模块,专为提高数据库批量操作的性能而设计。在大型系统中,处理大量数据时,批量操作是必不可少的优化手段。MyBatis-Batch 提供了简单易用的 API,使得开发者能够方便地在 ...
标题 "mybatis的测试架包" 提供了一个关于MyBatis框架测试环境的概述,而描述则强调了这个包的全面性,适用于学习和开发,确保不会因为缺少库而导致问题。从标签 "mybatis 架包" 可以看出,这个压缩包主要包含了与...
这个压缩包"generator-mysql"很可能包含了一套MyBatis的基础代码示例,以及对应的单元测试,特别适用于学习和实践MyBatis的使用。 在MyBatis中,核心组件包括XML或注解形式的Mapper接口、SQL映射文件以及...
SpringMVC作为Spring框架的一部分,提供了强大的MVC设计模式实现,而Mybatis则是一个轻量级的ORM(对象关系映射)框架,简化了数据库操作。将两者整合,可以构建出高效、灵活的企业级应用。 首先,SpringMVC的核心...
MyBatis允许通过配置日志实现,如Log4j、SLF4J或Java内置的日志系统,帮助开发者调试SQL执行和性能优化。 通过这个测试项目,你可以深入理解MyBatis的各个组件,掌握如何编写和执行SQL,以及如何实现复杂的级联查询...
标题 "从iBatis迁移到MyBatis" 暗示了本次讨论的主题是关于数据库持久层框架的升级,从较早的iBatis转向更现代的MyBatis。iBatis是一个Java语言中的SQL映射框架,而MyBatis是在iBatis的基础上发展起来的,提供了更多...
总结,处理MyBatis中的CLOB类型转换,主要涉及自定义TypeHandler、配置MyBatis、在Mapper中应用TypeHandler,以及在编程时考虑异常处理和性能优化。通过这些步骤,可以有效地管理和操作CLOB类型数据,解决插入数据库...
7. **事务管理**:MyBatis支持手动和自动两种事务管理模式。在测试中,通常会使用SqlSessionFactory的openSession()方法创建一个默认开启了自动提交的SqlSession。 8. **日志系统**:MyBatis集成了多种日志实现,如...
在构建一个基于Springboot+Mybatis的接口自动化测试框架时,我们需要深入了解这两个核心技术和接口测试的基本原理。Springboot以其简洁的配置和快速的开发能力,成为现代Java Web应用的首选框架,而Mybatis则提供了...
7. **性能测试**:在测试阶段,我们还可以进行性能测试,观察MyBatis在SQL Server 2005上的查询效率,比如使用JMeter或 Gatling 这样的工具来模拟高并发场景,评估系统在压力下的表现。 8. **异常处理**:测试过程...
springboot整合mybatis+测试生产环境,主要集成springboot+mybatis,由于生产测试开发有3个环境,整合到springboot,通过maven控制,maven install加入参数-pdev是开发环境-ptest是测试环境-pprod是生产环境
MyBatis批量提交大量数据是一种高效的数据批量操作方式,通过MyBatis的BATCH方式执行增删改方法,可以实现在短时间内处理大量数据。下面对MyBatis批量提交大量数据的实现进行了详细的介绍。 MyBatis批量提交的优点 ...
此外,为了方便日后的调试和性能优化,我们还可以配置MyBatis的日志系统,比如使用Log4j或SLF4J。通过配置mybatis-config.xml文件,我们可以控制SQL语句的打印级别,帮助我们查看执行的SQL和耗时。 总的来说,...