首页 技术 正文
技术 2022年11月21日
0 收藏 794 点赞 3,167 浏览 1873 个字

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");}

  

 

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,905
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,430
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,727