最近项目中出现了一个功能存在性能问题,经过研究发现主要是出现在数据插入的时候,当时用的单条提交,发现性能极其差,因为项目中用的mybatis,所以考虑用批量提交的方式。
<!-- 批量提交 --> <insert id="batchInsertWithoutSeq" parameterType="java.util.List"> insert into ACC_AGGENTRY (SEQ, AGGENTRY_SEQ, THIACCOUNTSUM_SEQ, BUSDATA_FLAG, ENTRY_TYPE, FUND_PROPERTY, FIRSTACCOUNT_NAME, SECACCOUNT_NAME, THIACCOUNT_NAME, DEBIT_CREDIT, ORIGIN_CURR, ORIGIN_AMT, DOMESTIC_CURR, DOMESTIC_AMT, COST_CENTER, OTHER_NAME, DOC_TYPE, TRADE_DATE, TALLY_DATE, AGGENTRY_DATETIME, PRODUCT_FLAG, OFFLINE_DOCTYPE, DOC_NO, AIRPRO_DOM, ACCOUNT_MONTH, ITFC_DATETIME, ITFC_NAME, ACCOUNT_PROPERTY, BUSINESSTYPE,FIRST_ACCOUNT_CODE) <foreach collection="list" item="itm" index="index" separator="UNION ALL"> (select #{itm.seq,jdbcType=DECIMAL},#{itm.aggentrySeq,jdbcType=DECIMAL}, #{itm.thiaccountsumSeq,jdbcType=DECIMAL}, #{itm.busdataFlag,jdbcType=VARCHAR}, #{itm.entryType,jdbcType=VARCHAR}, #{itm.fundProperty,jdbcType=VARCHAR}, #{itm.firstaccountName,jdbcType=VARCHAR}, #{itm.secaccountName,jdbcType=VARCHAR}, #{itm.thiaccountName,jdbcType=VARCHAR}, #{itm.debitCredit,jdbcType=VARCHAR}, #{itm.originCurr,jdbcType=VARCHAR}, #{itm.originAmt,jdbcType=DECIMAL}, #{itm.domesticCurr,jdbcType=VARCHAR}, #{itm.domesticAmt,jdbcType=DECIMAL}, #{itm.costCenter,jdbcType=VARCHAR}, #{itm.otherName,jdbcType=VARCHAR}, #{itm.docType,jdbcType=VARCHAR}, #{itm.tradeDate,jdbcType=DECIMAL}, #{itm.tallyDate,jdbcType=DECIMAL}, #{itm.aggentryDatetime,jdbcType=DECIMAL}, #{itm.productFlag,jdbcType=VARCHAR}, #{itm.offlineDoctype,jdbcType=VARCHAR}, #{itm.docNo,jdbcType=VARCHAR}, #{itm.airproDom,jdbcType=VARCHAR}, #{itm.accountMonth,jdbcType=DECIMAL}, #{itm.itfcDatetime,jdbcType=DECIMAL}, #{itm.itfcName,jdbcType=VARCHAR}, #{itm.accountProperty,jdbcType=VARCHAR}, #{itm.businesstype,jdbcType=VARCHAR}, #{itm.firstAccountCode,jdbcType=VARCHAR} from dual) </foreach> </insert>
批量提交的核心功能
遇到的问题:如果一次提交的数据条数过大,比如3000条,就会报异常:无效主机/绑定变量 的异常,很模糊的一个错误,后来只能改成多次分批提交,具体分多少次一次多少条,当时测试1000条一次是没有问题。
希望遇到相同问题的人给予解释,谢谢
相关推荐
本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...
MyBatis批量插入数据到Oracle数据库中的两种方式 MyBatis是一款流行的持久层框架,提供了批量插入数据到数据库的功能。本文将通过实例代码,分享MyBatis批量插入数据到Oracle数据库中的两种方式。 第一种方式:...
Java实现使用Mybatis将数据批量插入到Oracle数据库,并且可以使用Oracle序列来生成主键
MyBatis foreach批量插入数据:Oracle与MySQL区别介绍 MyBatis foreach批量插入数据是一种高效的数据批量插入方式,通过foreach标签可以实现批量插入数据。但是,在不同的数据库管理系统中,foreach标签的使用有...
在上面的示例中,使用了foreach元素来批量插入数据。foreach元素可以根据不同的条件生成不同的SQL语句。 动态SQL的优点 ------------- MyBatis的动态SQL特性有很多优点,例如: * 提高代码的灵活性和可维护性 * ...
Mybatis批量插入数据返回主键的实现 Mybatis是当前最流行的持久层框架之一,它提供了强大的批量插入功能,但是在批量插入数据时如何返回主键是一个常见的问题本文将详细介绍Mybatis批量插入数据返回主键的实现。 ...
在MyBatis中,批量插入数据是一种提高性能的有效方式,特别是在处理大量数据时。本文将详细介绍如何在MyBatis中实现批量插入,并通过一个具体的示例来说明。批量插入操作通常涉及以下关键步骤: 1. **实体类定义**...
Mybatis批量foreach merge into的用法是通过Mybatis的动态SQL语法foreach循环插入实现的,这种方法可以批量插入时间价格表数据。如果某个套餐的某天的价格存在,则更新,不存在则插入。下面是该方法的详细介绍: ...
"Mybatis调用Oracle存储过程传List...使用Mybatis传List参数调用Oracle存储过程,可以实现批量插入数据,解决了Mybatis批量插入数据的限制问题。同时,这种方法也可以灵活地控制事务回滚,提高了系统的可靠性和性能。
本文将详细探讨如何在Oracle数据库中进行批量插入优化,并介绍MyBatis Generator这一自动化代码生成工具,以提高开发效率。 首先,让我们深入理解Oracle数据库中的批量插入。批量插入可以显著提升性能,尤其是在...
在实际开发中,批量插入数据是非常常见的需求。使用 Spring 框架结合 MyBatis 框架,可以实现高效的批量插入操作。本文将详细介绍 Spring 中使用 MyBatis 实现批量插入的示例代码,主要分为三种实现方式:foreach、...
在数据库操作中,批量插入数据是常见的需求,尤其是在处理大量数据时,批量插入能够显著提高效率。Mybatis,作为一款轻量级的持久层框架,提供了灵活的方式来处理批量添加。本文将详细介绍如何使用Mybatis进行批量...
本文将详细讲解如何使用MyBatis的注解方式在MySQL和Oracle数据库上实现批量处理,旨在提高数据操作的效率。 首先,我们要理解MyBatis的核心原理,它是一个基于Java的持久层框架,通过XML或注解来映射SQL语句,简化...
这样做是因为Oracle不支持像MySQL那样的`VALUES`子句进行批量插入,所以我们需要模拟这个过程,通过`UNION ALL`将多个单行查询组合成一个大的`SELECT`。 在Service层,我们定义了`addBleaseList`方法,它接收一个`...
本篇文章重点讨论如何在Oracle数据库环境下,利用MyBatis进行批量插入、更新和删除操作,这有助于提高数据库操作的效率,减少资源消耗。 批量操作在处理大量数据时尤其重要,因为单条记录的事务提交会消耗更多的...
在尝试批量插入数据时,常见的做法是创建一个包含待插入对象的List,然后通过MyBatis的`<foreach>`标签将这些对象插入到数据库中。例如,以下是一个错误的示例: ```xml <![CDATA[SELECT SEQ_OCL_SUPCITY....
首先,我们看到一个关键的MyBatis XML映射文件中的`<insert>`标签,用于批量插入数据。这个`<insert>`标签内包含了一个`<![CDATA[...]]>`结构,这是为了防止SQL语句中的特殊字符(如 `>` 和 `)被XML解析器误解析。...