Java使用iBatis批量插入数据到Oracle数据库
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数据库的更多相关文章
- Java 批量插入数据(Oracle)
//批量添加20000条数据用时8秒. try { String url = "jdbc:oracle:thin:@IP:1521:orcl"; // orcl为数据库的SI ...
- mybatis批量插入数据到oracle
mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“ 错误解决方法 oracle批量插入使用 insert a ...
- mybatis foreach批量插入数据:Oracle与MySQL区别
mybatis foreach批量插入数据:Oracle与MySQL不同点: 主要不同点在于foreach标签内separator属性的设置问题: separator设置为","分 ...
- IBatis批量插入数据
IBatis插入注意,数据量比较多的花,需要分批插入,策略是dao里面控制插入批次,mapper里面批量插入即可 @Override public Long insertBatch(List<W ...
- 批量Excel数据导入Oracle数据库
由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...
- .Net批量插入数据到SQLServer数据库,System.Data.SqlClient.SqlBulkCopy类批量插入大数据到数据库
批量的的数据导入数据库中,尽量少的访问数据库,高性能的对数据库进行存储. 采用SqlBulkCopy来处理存储数据.SqlBulkCopy存储大批量的数据非常的高效,将内存中的数据表直接的一次性的存储 ...
- Android 批量插入数据到SQLite数据库
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...
- Android批量插入数据到SQLite数据库
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知.因此在Android中插入数据时,使用批量插入的方式 ...
- 用SqlBulkCopy批量插入数据到SqlServer数据库表中
首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using Syst ...
随机推荐
- 新闻实时分析系统-Flume+HBase+Kafka集成与开发
1.下载Flume源码并导入Idea开发工具 1)将apache-flume-1.7.0-src.tar.gz源码下载到本地解压 2)通过idea导入flume源码 打开idea开发工具,选择File ...
- cenos7搭建gitlab
git.github和gitlab的区别 git:是一种版本控制系统,是一个命令,是一种工具 gitlib:是基于实现功能的开发库 github:是一个基于git实现的在线代码仓库软件 gitlib可 ...
- Django的settings文件部分源码分析
Django的settings文件部分源码分析 在编写Django项目的过程中, 其中一个非常强大的功能就是我们可以在settings文件配置许多选项来完成我们预期的功能, 并且这些配置还必须大写, ...
- Docker harbor 安装和基础操作
目录 简介 离线安装 配置文件 安装 查看 访问测试 及 简单操作 创建一个用户 创建一个测试仓库 创建测试仓库 测试上传和下载镜像 上传 下载镜像测试 简介 Docker容器应用的开发和运行离不开可 ...
- 小白学 Python 爬虫(12):urllib 基础使用(二)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- tp5实现支付宝电脑支付(详解)
首先吐槽一下支付宝的官方文档,它只是简单介绍一下开发的流程和参数,而对于新人来说如果只看它的官方文档很多时候是看不懂的,我也是边看文档边网上查资料才把它弄懂.下面我详细介绍支付宝的电脑支付是如何实现 ...
- 01Shell入门02-echo和printf
输出方式 小知识 echo echo -e 可以控制字体颜色和背景颜色输出 示例 echo -e "\033[41;36m Hello world \033[0m" [root@h ...
- 一条数据的HBase之旅,简明HBase入门教程2:数据模型
[摘要] 上一篇文章讲了HBase项目与应用概况信息,这篇文章讲述HBase的数据模型以及一些基础概念,数据模型可以说决定了HBase适合于什么应用场景. 华为云上的NoSQL数据库服务CloudTa ...
- 基于webpack实现多html页面开发框架三 图片等文件路径替换、并输出到打包目录
一.解决什么问题 1.图片路径替换.并输出到打包目录 2.输出目录清理 二.需要安装的包 file-loader:html.css中图片路径替换,图片输出到打包目录:命令:npm ...
- 定时器注解 @Scheduled 使用
试列代码: @Component @Slf4j //配置文件注入注解 @PropertySource("classpath:/**.properties") public clas ...