본문 바로가기

Programming/iBatis

iBatis - selectKey (자동생성키)

자동 생성 키

많은 관계형 데이터베이스 시스템은 기본키(primay key)필드의 자동생성을 지원한다. 

SQL Map은 <insert>요소의 <selectKey>를 통해 자동생성키를 지원

선생성키(pre-generated - 오라클의 sequence) 와 후생성키(post-generated - MS-SQL의 @@identity)를 지원


선생성키의 예 (Oracle)

<!—Oracle SEQUENCE Example -->

<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">

<selectKey resultClass="int" keyProperty="id" >

SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL

</selectKey>

insert into PRODUCT (PRD_ID,PRD_DESCRIPTION)

values (#id#,#description#)

</insert>


간혹 Sequence를 이용하지 않고 아래와 같이 Max+1로 사용하기도 하는데 이는 사용하기에 적합하지 않다.

<selectKey resultClass="int" keyProperty="id" >

(SELECT NVL(MAX(PRD_ID), 0) + 1 FROM PRODUCT)

</selectKey>


후생성키의 예 

(MsSQL)

<!— Microsoft SQL Server IDENTITY Column Example -->

<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">

insert into PRODUCT (PRD_DESCRIPTION) values (#description#)

<selectKey resultClass="int" keyProperty="id" >

SELECT @@IDENTITY AS ID

</selectKey>

</insert>


(MySQL)

<insertid="insertProduct-MYSQL"parameterClass="product">

insert into PRODUCT (PRD_DESCRIPTION)  values (#description#)  

<selectKeyresultClass="int"type="post"keyProperty="id">

select LAST_INSERT_ID() as value  

<selectKey>

<insert> 


참조 : iBatis-SqlMaps-2_ko.pdf





'Programming > iBatis' 카테고리의 다른 글

ClassMap을 이용한 복합(Complex) Properties  (0) 2012.12.27
iBatis - Iterate  (1) 2012.11.16
QueryForList와 QueryForMap의 차이 예  (0) 2012.04.09
QueryForObject, List, Map  (0) 2012.04.09
iBatis - 동적쿼리  (0) 2012.04.06