[iBatis Tip] Oracle Multi-insert를 iBatis iterator를 사용하여 구현해 보자.

Programming 2009.09.08 16:16
오라클에는 여러개의 값을 한번에 insert하기 위해서 쓰는 multi insert구문이 있습니다.
바로 insert all인데요.
CREATE TABLE t (
pid   NUMBER(5),
fname VARCHAR2(20),
lname VARCHAR2(25));

INSERT ALL
INTO t (pid, fname, lname)
VALUES (1, 'Dan', 'Morgan')
INTO t (pid, fname, lname)
VALUES (2, 'Jeremiah', 'Wilton')
INTO t (pid, fname, lname)
VALUES (3, 'Helen', 'Lofstrom')
SELECT * FROM dual;
SELECT * FROM t;

위와 같이 쓰는겁니다.

자 그럼 위와 같은 커리를 iBatis로 편하게 만드려면 어케하는지 봅시다.

일단 자바 클래스부터 살펴볼까요?

모델이 되는 클래스 부터.
public class Table{
private String pid;
private String fname;
private int lname;
public String getPid() { return pid; } public void setPid(String pid) { this.pid = pid; } public String getFname() { return fname; } public void setFname(String fname) { this.fname = fname; } public int getLname() { return lname; } public void setLname(int lname) { this.lname = lname; }
}

DAO 클래스는 알아서 만드시고 메소드만 넣을게요.
public Object tableMultiInsert(List<Table> param ) {
return getSqlMapClientTemplate().insert("Table.tableMultiInsert", param);
}

SqlMap.xml은 아래와 같이.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 
    "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="Table">

<insert id="tableMultiInsert" parameterClass="java.util.List">
INSERT ALL
        <dynamic>
<iterate conjunction=" "  >
INTO t (pid, fname, lname) 
VALUES (#[].pid#, #[].fname#, #[].lname#)
</iterate>
</dynamic>
SELECT * FROM dual
</insert>

</sqlMap>

요렇게 쓰심 됩니다~~


저작자 표시 비영리 변경 금지
신고


티스토리 툴바