Java使用iBatis批量插入数据到Oracle数据库

因为我们的数据跨库(mysql,oracle),单独取数据的话需要遍历好多遍,所以就想着先从mysql数据库中取出来的数据然后在oracle数据库中建立结果集对应的临时表,先插入然后再统一查询(中间就节省了遍历再重组数据的时间了)。

1.首先我们从mysql数据库中查询出对应数据

sql:

     <select id="queryUsers" parameterClass="java.util.Map" resultClass="com.demo.report.dao.pojo.User">
<![CDATA[
select name,age,sex from T_user
]]>
</select>

 

2.在oracle数据库中建立对应的临时表,(需要提前在对应的数据库中执行)

drop table report_user ;
create table report_user
(
name VARCHAR2(20),
age VARCHAR2(10),
sex VARCHAR2(6)
);

3.插入的Dao定义,需要注意批量插入数据会有量的限制 ,这里定义每次插入1000条数据

参数类型为List,参数名为: userList

对应sqlmap的方法id为: insertReportUsert2Oracle

    /*Test 20191219 batch insert data*/
public Object insertReportUsert2Oracle(List<User> userList){
Map<String,Object> parm=new HashMap<String, Object>();
int len = userList.size()/1000 +1;
int modlen = userList.size()%1000 ;
System.err.println("len="+len);
System.err.println("modlen="+modlen);
int start = 0;
int end = 1000;
for(int i=0;i<len;i++){
System.err.println(i+"----start="+start);
System.err.println(i+"----end="+end);
List<ArtificialHK> tmpUserList = userList.subList(start, end);
parm.put("userList", tmpUserList);
st.insert("report.insertReportUsert2Oracle", parm);
if(i==(len-2)){
end +=modlen;
}else{
end +=1000;
}
start +=1000; } return "insert";
}

 

4.批量插入oarcle数据库的脚本信息

这里用的关键字是 union all,且记住从List里面获取数据的格式为 userList[].xxx

<sqlMap namespace="report">
<insert id ="insertReportUsert2Oracle" parameterClass="java.util.Map" >
INSERT INTO report_user
(
name
,age
,sex
)
(
<iterate property="userList" conjunction="union all">
select
#userList[].name#,
#userList[].age#,
#userList[].sex# from dual
</iterate>
)
</insert >

  

5.单元测试

     @Test
public void insertReportUsert2OracleTest() throws IMException{
long starttime = System.currentTimeMillis();
System.err.println("===========starttime = " +starttime);
userDao.insertReportUsert2Oracle();
long endtime = System.currentTimeMillis();
System.err.println("===========endtime = " +endtime);
System.err.println("=========== daycount = " + ((endtime-starttime)/1000)+" s"); }

  

 

Java使用iBatis批量插入数据到Oracle数据库的更多相关文章

  1. Java 批量插入数据(Oracle)

    //批量添加20000条数据用时8秒. try {    String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SI ...

  2. mybatis批量插入数据到oracle

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

  3. mybatis foreach批量插入数据:Oracle与MySQL区别

    mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分 ...

  4. IBatis批量插入数据

    IBatis插入注意,数据量比较多的花,需要分批插入,策略是dao里面控制插入批次,mapper里面批量插入即可 @Override public Long insertBatch(List<W ...

  5. 批量Excel数据导入Oracle数据库

    由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...

  6. .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库

    批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...

  7. Android 批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...

  8. Android批量插入数据到SQLite数据库

    Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...

  9. 用SqlBulkCopy批量插入数据到SqlServer数据库表中

    首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using Syst ...

随机推荐

  1. 扛把子组20191107-8 beta week 2/2 Scrum立会报告+燃尽图 07

    此作业的要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9960 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩 ...

  2. react create-react-app使用less 及关闭eslint

    使用less和关闭eslint都需要先运行命令 npm run  eject 来暴露配置文件,(不可逆的) 一.less使用 运行命令安装less npm install less less-load ...

  3. 继上篇-jquery ajax提交 本篇用ajax提交的数据去数据库查询

    上篇讲到如何用jquery ajax提交数据至后台,后台接收并返回给ajax.https://www.cnblogs.com/tiezhuxiong/p/11943328.html 今天我们把数据传到 ...

  4. 每天复现一个漏洞--vulhub

    phpmyadmin scripts/setup.php 反序列化漏洞(WooYun-2016-199433) 漏洞原理:http://www.polaris-lab.com/index.php/ar ...

  5. RAM、ROM和fFLASH相关概念整理

    一:ROM ROM:Read Only Memory.只读存储器    是一种半导体内存,又叫做非挥发性内存.其特性是一旦数据被存储就无法再将之改变或删除.存储的数据不会因为电源关闭而消失.   二: ...

  6. 题解——面积(area.cpp)

    题目来源&题面简述: 思路与算法选择: 只有*里面的部分对我们有用,所以可以将 *号外的部分标记一下. 可以用著名的BFS大法实现此过程.(连通块) 连通块模板: #include<bi ...

  7. 《手把手教你》系列练习篇之3-python+ selenium自动化测试(详细教程)

    1.  简介 前面介绍了,XPath, id , class , link text, partial link text, tag name, name 七大元素定位方法,本文介绍webdriver ...

  8. Rust 入门 (三)_下

    这部分我们学习 rust 语言的 变量.数据类型.函数.注释.流程控制 这五个方面的内容.前文介绍了前两个内容,本文介绍后三个内容. 函数 函数在 rust 代码普遍存在,我们也已经见过了它的主函数 ...

  9. day20191120笔记

    1.spring的优势 U盘拷.总结.微信公众号:.2.笔试,课前默写,默完之后要回答问题.3.微服务,带着,知识点,卷子.ssm整个东西讲一下.面试是综合能力.背面试题. 通过基础很重要.学精烂熟于 ...

  10. NIO-Buffeer

    目录 NIO-Buffeer 目录 什么是Buffer 缓冲区类型 缓冲区存储类型 字节存放顺序 Buffer使用 Buffer ByteBuffer 总结 相关文献 NIO-Buffeer 目录 N ...