mybatis批量插入oracle大量数据记录性能问题解决
环境: mybatis + oracle11g r2
1.使用"直接路径插入"(以下sql语句中的"/*+append_values */"),而且使用keyword"union all":
<insert id="addUidCodeBatch" parameterType="java.util.List">
insert into /*+append_values */
T_UID_CODE(C_UID_CODE,
C_SERAIL_LEN,
C_BATCH_CODE,
C_TYPE,
C_CREATE_TIME,
C_SUPER_CODE,
c_security_code,
C_SERIAL_CODE
)
<foreach collection="list" item="item" index="index" separator="union all" >
select #{item.uidCode},
#{item.kCode},
#{item.batchCode},
#{item.type},
sysdate,
#{item.superCode},
#{item.securityCode},
#{item.serialCode}
from dual
</foreach>
</insert>
2.dao层实现: 之前是一次性commit,这样做会随着插入数目的增大,运行速度陡然变慢,所以应该分批次进行插入:
	public void save(List<UidCodeBean> uidCodeList) throws Exception {
		SqlSession batchSqlSession = null;
		try {
			batchSqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH, false);//获取批量方式的sqlsession
			int batchCount = 1000;//每批commit的个数
			int batchLastIndex = batchCount - 1;//每批最后一个的下标
			for(int index = 0; index < uidCodeList.size()-1;){
				if(batchLastIndex > uidCodeList.size()-1){
					batchLastIndex = uidCodeList.size() - 1;
					batchSqlSession.insert(NAMESPACE+".addUidCodeBatch", uidCodeList.subList(index, batchLastIndex));
					batchSqlSession.commit();
					System.out.println("index:"+index+"     batchLastIndex:"+batchLastIndex);
					break;//数据插入完成,退出循环
				}else{
					batchSqlSession.insert(NAMESPACE+".addUidCodeBatch", uidCodeList.subList(index, batchLastIndex));					                batchSqlSession.commit();
					System.out.println("index:"+index+"     batchLastIndex:"+batchLastIndex);
					index = batchLastIndex + 1;//设置下一批下标
					batchLastIndex = index + (batchCount - 1);
				}
			}
		}finally{
			batchSqlSession.close();
		}
	}
mybatis批量插入oracle大量数据记录性能问题解决的更多相关文章
- mybatis批量插入oracle时报错:unique constraint (table name) violated
		
mybatis批量插入oracle时报错:unique constraint (table name) violated,是因为插入的集合中有两条相同唯一约束的数据.
 - 一次EF批量插入多表数据的性能优化经历
		
距离上次的博客已经有15个多月了,感慨有些事情还是需要坚持,一旦停下来很有可能就会停很久或者从此再也不会坚持.但我个人一直还坚持认为属于技术狂热份子,且喜欢精益求精的那种.最近遇到两个和数据迁移相关的 ...
 - mybatis批量插入oracle
		
<insert id="batchInsert" parameterType="java.util.List"> INSERT INTO TEST( ...
 - Mybatis批量插入oracle,mysql
		
oracle <insert id="addUserData" parameterType="java.util.List"> INSERT IN ...
 - mybatis批量插入数据到oracle
		
mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“ 错误解决方法 oracle批量插入使用 insert a ...
 - oracle+mybatis批量插入踩坑记
		
最近在项目中需要使用oracle+mybatis批量插入数据,因为自增主键,遇到问题,现记录如下: 一.常用的两种sql写法报错 1.insert ... values ... <insert ...
 - Mybatis 批量插入数据
		
--mybatis 批量插入数据 --1.Oracle(需要测试下是否支持MySQL) < insert id ="insertBatch" parameterType=&q ...
 - MyBatis批量插入性能及问题
		
1.mybatis三种批量插入方式对比 2.Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 3.Mybatis批量插入引发的血案 4.Oracle批量插入数据SQL语句太长出错
 - MyBatis 批量插入数据的 3 种方法!
		
批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于<MyBatis Plus 批量数据插入功能,yyds!>的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 ...
 
随机推荐
- C++异常与析构函数及构造函数
			
析构函数不要抛出异常. 构造函数可以抛出异常,但是要谨慎. 原因下面这篇文章讲的不错,转载如下: http://jarfield.iteye.com/blog/811703 写Java代码的时候,遇到 ...
 - [Tailwind] Style Elements on hover and focus with Tailwind’s State Variants
			
In this lesson, we learn how to target specific states of elements and apply styles only when those ...
 - hdu3966_树链剖分
			
近期在强化知识点深度.发现树链剖分不是非常会写了. 回想一下改动操作: 若两个点在同一条链上,则直接改动这段区间. 若不在同一条链上,改动深度较大的点到其链顶端的区间,同一时候将这个点变为他所在链顶端 ...
 - 公布项目到NPM
			
修己安人,内圣外王 近期,在开发Node项目过程中遇到了须要类jQuery深拷贝对象的问题.去Github找了半天,并没有符合的,于是,自己决定写一个(mixin.js),然后推送到NPM(查看Npm ...
 - JavaSE 最easy出错的几个简单的问题
			
案例1. package cn.itcast.oop; public class ThisDemo { public static void main(String[] args) { Student ...
 - .NET序列化工具Jil、Json.NET和Protobuf的简单测评
			
前一段时间逛园子的时候发现有人比较了Jil.Json.NET和Protobuf的性能,一时好奇,也做了个测试,这里记录下来,以供查阅. 前期准备 依赖类库的话,可以通过Nuget在公共组件库总下载,这 ...
 - BZOJ 3729 splay维护DFS序+博弈论
			
思路: 这像是 阶梯Nim之类的东西 我们 直接把sg函数 设成mod(L+1)的 一棵子树 向下的奇数层上的石子xor起来 就是答案 有加点和改值的操作 就splay维护一下 //By Sirius ...
 - 在centOS 6.5下手动安装nginx1.9.x版本
			
第一步:首先安装Nginx的依赖环境 1.安装pcre-devel yum -y install pcre-devel #支持正则的pcre模块 比如安装 不然手动安装会报错 2.安 ...
 - MVC bundle配置文件模板
			
bundle文件放在应用根目录,命名为 bundle.config 内容模板 <?xml version="1.0" encoding="utf-8"? ...
 - Java基础——选择排序、冒泡排序
			
1.选择排序 原理是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 代码演示: public class Test3 { public sta ...