环境: 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大量数据记录性能问题解决的更多相关文章

  1. mybatis批量插入oracle时报错:unique constraint (table name) violated

    mybatis批量插入oracle时报错:unique constraint (table name) violated,是因为插入的集合中有两条相同唯一约束的数据.

  2. 一次EF批量插入多表数据的性能优化经历

    距离上次的博客已经有15个多月了,感慨有些事情还是需要坚持,一旦停下来很有可能就会停很久或者从此再也不会坚持.但我个人一直还坚持认为属于技术狂热份子,且喜欢精益求精的那种.最近遇到两个和数据迁移相关的 ...

  3. mybatis批量插入oracle

    <insert id="batchInsert" parameterType="java.util.List"> INSERT INTO TEST( ...

  4. Mybatis批量插入oracle,mysql

    oracle  <insert id="addUserData" parameterType="java.util.List"> INSERT IN ...

  5. mybatis批量插入数据到oracle

    mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“  错误解决方法 oracle批量插入使用 insert a ...

  6. oracle+mybatis批量插入踩坑记

    最近在项目中需要使用oracle+mybatis批量插入数据,因为自增主键,遇到问题,现记录如下: 一.常用的两种sql写法报错 1.insert ... values ... <insert ...

  7. Mybatis 批量插入数据

    --mybatis 批量插入数据 --1.Oracle(需要测试下是否支持MySQL) < insert id ="insertBatch" parameterType=&q ...

  8. MyBatis批量插入性能及问题

    1.mybatis三种批量插入方式对比 2.Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案 3.Mybatis批量插入引发的血案 4.Oracle批量插入数据SQL语句太长出错

  9. MyBatis 批量插入数据的 3 种方法!

    批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于<MyBatis Plus 批量数据插入功能,yyds!>的文章,但评论区的反馈不是很好,主要有两个问题:第一,对 ...

随机推荐

  1. [SharePoint][SharePoint Designer 入门经典]Chapter7 数据源和外部内容类型

    本章概要: 1.SharePoint能够使用的数据类型 2.如何从SharePoint列表和库中取得数据并展现出来 3.SharePoint访问远程数据 4.如何把外部数据源作为列表展现在你的SPS站 ...

  2. VMWare虚拟机下为Ubuntu 12.04.1网络设置(NAT方式)

    NAT方式: 虚拟机能够上外网,能够訪问宿主计算机所在网络的其它计算机(反之不行). 第一步:设置虚拟机vmware网络參数 (1)打开虚拟机,选择菜单"编辑">" ...

  3. kettle 使用excel模板导出数据

    通过excel进行高速开发报表: 建设思路: 1.首先制订相关的execl模板. 2.通过etl工具(kettle)能够高速的 将数据库中的数据按excel模板导出成新的excel就可以. 当中ket ...

  4. python的range()函数使用方法

    python的range()函数使用非常方便.它能返回一系列连续添加的整数,它的工作方式类似于分片.能够生成一个列表对象. range函数大多数时常出如今for循环中.在for循环中可做为索引使用.事 ...

  5. MySQL具体解释(8)----------MySQL线程池总结(二)

    这篇文章是对上篇文章的一个补充,主要环绕下面两点展开.one-connection-per-thread的实现方式以及线程池中epoll的使用. one-connection-per-thread 依 ...

  6. c# DataTable to Object Mapping

    public static class DataTableExtensions { public static IList<T> ToList<T>(this DataTabl ...

  7. UVA 11346 - Probability 数学积分

    Consider rectangular coordinate system and point L(X, Y ) which is randomly chosen among all pointsi ...

  8. Oracle在Linux下的性能优化

    Oracle数据库内存参数的优化 Ø       与oracle相关的系统内核参数 Ø       SGA.PGA参数设置   Oracle下磁盘存储性能优化 Ø       文件系统的选择(ext2 ...

  9. HTML-虚线框3例

    第一例: 代码 <HR style=> 第二例: 代码 <DIV style="BORDER-TOP: #00686b 1px dashed; OVERFLOW: hidd ...

  10. POJ 3660 Floyd传递闭包

    题意:牛有强弱,给出一些牛的强弱的胜负关系,问可以确定几头牛的排名. 思路: Floyd传递闭包 // by SiriusRen #include <bitset> #include &l ...