近日在公司项目中,使用到spring+mybatis的架构,特对mybatis的batch模式做了相关研究,得出以下结论:
插入多条有多种实现方式:
list方式,使用的为:insert table values(column1),(column2)的方式。
java的DAo 代码:
int insertBath(List<userShopOrderLink> recordList);
<insert id="insertBath" > insert into user_shop_order_link (seller_id, shop_id, sku1, sku1_name, three_sort1, three_sort1_name, sku2, sku2_name, three_sort2, three_sort2_name, relevance, related, binding, mark, select_link, create_date) values <foreach collection="list" item="item" index="index" separator=","> (#{item.sellerId}, #{item.shopId}, #{item.sku1}, #{item.sku1Name}, #{item.threeSort1}, #{item.threeSort1Name}, #{item.sku2}, #{item.sku2Name}, #{item.threeSort2}, #{item.threeSort2Name}, #{item.relevance}, #{item.related}, #{item.binding}, #{item.mark}, #{item.selectLink}, #{item.createDate}) </foreach> </insert>
另外一种采用bath直接由自己控制事物的提交。
Mybatis内置的ExecutorType有3种SIMPLE, REUSE, BATCH;
默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,批量执行所有更新语句,显然batch性能将更优;batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的,在同一事务中batch模式和simple模式之间无法转换,由于本项目一开始选择了simple模式,所以碰到需要批量更新时,只能在单独的事务中进行。
在代码中使用batch模式可以使用以下方式:
//从spring注入原有的sqlSessionTemplate @Autowired private SqlSessionTemplate sqlSessionTemplate; public void testInsertBatchByTrue() { //新获取一个模式为BATCH,自动提交为false的session //如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出 SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false); //通过新的session获取mapper session.getConnection().setAutoCommit(false);//不自动提交 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(); } }
以上个人总结,会有不妥地方,希望给大家提供帮助。
相关推荐
本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...
MyBatis批量插入数据到Oracle数据库中的两种方式 MyBatis是一款流行的持久层框架,提供了批量插入数据到数据库的功能。本文将通过实例代码,分享MyBatis批量插入数据到Oracle数据库中的两种方式。 第一种方式:...
Mybatis批量插入数据返回主键的实现 Mybatis是当前最流行的持久层框架之一,它提供了强大的批量插入功能,但是在批量插入数据时如何返回主键是一个常见的问题本文将详细介绍Mybatis批量插入数据返回主键的实现。 ...
"MyBatis批量插入数据过程解析" 在本篇文章中,我们将详细介绍MyBatis批量插入数据过程解析的知识点,通过示例代码对大家的学习或者工作具有一定的参考学习价值。 首先,让我们来了解MyBatis批量插入数据过程的...
在XML配置文件中,我们可以使用foreach标签来批量插入数据。例如: ```xml insert into user(id,account,password,active,status,name,gender,active_date,expiry_date,type,remark,group_id,disable,exam_number,...
通过这种方式,你可以方便地在MyBatis中实现批量插入数据,提高数据库操作的效率。同时,由于SQL语句直接写在配置文件中,当表结构发生变化时,只需要修改配置文件,而不需要修改大量的业务代码,降低了维护成本。
在批量插入数据的场景下,可以创建一个CountDownLatch对象,初始化为线程的数量,每个线程处理完自己的数据后调用`countDown()`方法,主线程通过调用`await()`方法等待所有线程完成后再执行后续操作,如提交事务。...
在数据库操作中,批量插入(Batch Insert)是一种提高性能的有效方式,尤其是在处理大量数据时。本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database ...
本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...
在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...
在上面的示例中,使用了foreach元素来批量插入数据。foreach元素可以根据不同的条件生成不同的SQL语句。 动态SQL的优点 ------------- MyBatis的动态SQL特性有很多优点,例如: * 提高代码的灵活性和可维护性 * ...
在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...
MyBatis批量新增数据方法详解 MyBatis是当前流行的持久层框架之一,提供了批量新增数据的方法来提高数据insert的效率。在本文中,我们将详细介绍MyBatis批量新增数据的方法,并对比单条insert和批量insert的效率。 ...
在MySQL中进行批量插入时,有时会遇到一种情况,即在插入数据的同时需要根据已存在的数据进行计算或选择。在MyBatis框架中处理这样的需求可能会遇到一些挑战,特别是当涉及到嵌套的SELECT语句时。这个问题的描述是...
Mybatis批量插入的四种方式 Mybatis 是一个流行的 Java 持久层框架,提供了多种方式来实现批量插入操作。下面将详细介绍 Mybatis 批量插入的四种方式。 1. 循环插入 循环插入是最简单的批量插入方式,即通过循环...
Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...
Mybatis实现多表联合查询和批量插入 Mybatis是一款流行的持久层框架,它可以帮助开发者快速、高效地访问数据库。在实际开发中,经常需要对多个表进行联合查询,或者对大量数据进行批量插入。本文将详细介绍如何使用...
Java实现使用Mybatis将数据批量插入到Oracle数据库,并且可以使用Oracle序列来生成主键
MyBatis foreach批量插入数据:Oracle与MySQL区别介绍 MyBatis foreach批量插入数据是一种高效的数据批量插入方式,通过foreach标签可以实现批量插入数据。但是,在不同的数据库管理系统中,foreach标签的使用有...