ibatis 批量插入[类对象]到 oracle 数据库

来源:互联网 发布:wingide linux 编辑:程序博客网 时间:2024/06/08 13:54
1.实现目标: 
a)使用ibatis实现批量插入数据到oracle数据库 
b)插入的是类对象数据列表 
c)插入的同时,需要使用数据库sequence生成对象的唯一标识 

2.实现过程: 

a)ibatis的xml文件配置详解

<insert id="insertSourceInfoList" parameterClass="java.util.List">  <![CDATA[    INSERT ALL  ]]>  <iterate conjunction=" ">    INTO net_addr_main_info      (na_id,       na_name,       na_status_id,       create_date,       status_date,       src_na_id,       remark)    VALUES      (F_GETSEQ(#list[].timestamp#),       #list[].na_name#,        10,        sysdate,        sysdate,        #list[].src_na_id#,       #list[].remark#)  </iterate>  <![CDATA[    SELECT * FROM dual  ]]></insert>
-> parameterClass="java.util.List" 传递需要保存的对象列表;

-> insert all 语法简介: insert all into net_addr_main_info (na_id, na_name) values (1000, 'test1')  
        into net_addr_main_info (na_id, na_name) values (1001, 'test2')  
select * from dual; 

-> F_GETSEQ(P_ID IN NUMBER)是一个数据库函数,功能是取出sequence的值。
因为,ibatis在生成 sql 语句的时候,只会取一次序列值,因此,不能在这个地方使用 sequence.nextval 取值,因此通过这样的数据库函数,取出序列值。函数的入参,是一个任意唯一值。在调用的时候,做为入参传递进去。 

CREATE OR REPLACE FUNCTION F_GETSEQ(P_ID IN NUMBER) RETURN NUMBER  DETERMINISTIC AS  V_SEQ NUMBER;BEGIN  SELECT SEQ_NA_ID.NEXTVAL INTO V_SEQ FROM DUAL;  RETURN V_SEQ;END;
-> select * from dual, 是insert all语法的一部分,因此不能省略。 
-> 使用<iterate>标签,对它包裹的内容进行迭代;conjunction=" ",迭代内容的连接符,这里使用空格进行连接。 
-> 因为传递的入参是list,且list内容是类对象,所以通过 #list[].na_name# 方式取类对象的属性。其中 'list' 无头紧要,可以换成其它任意字符;但是 [] 这两个字符不能舍弃,主要是起迭代作用;.na_name 是引用类对象属性。
0 0
原创粉丝点击