- INSERT전 Key값을 증가시켜서 입력하는 경우 (order:BEFORE)
- INSERT후 생성된 Key값을 반환해야 하는 경우 (order:AFTER)
- KEY로 사용되는 여러 개의 칼럼을 조회한 후 사용해야 하는 경우
USER_NO가 PK인 USER테이블이 존재하고 USER_NO는 DB 시퀀스로 관리한다고 가정하자.
BEFORE
<insert id="insertUser" parameterType="userDto" >
<selectKey order="BEFORE" keyProperty="newUserNo" resultType="Long">
SELECT USER_NO_SEQ.CURRVAL FROM DUAL
</selectKey>
INSERT INTO USERS
(
USER_NO
,CODE
,NAME
,PWD
...
)
VALUES
(
(SELECT USER_NO_SEQ.NEXTVAL FROM DUAL) AS USER_NO
,#{code}
,#{name}
,#{pwd}
...
)
</insert>
AFTER
<insert id="insertUser" parameterType="userDto" >
<selectKey order="AFTER" keyProperty="userNo" resultType="Long">
SELECT USER_NO_SEQ.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO USERS
(
USER_NO
,CODE
,NAME
,PWD
...
)
VALUES
(
#{userNo}
,#{code}
,#{name}
,#{pwd}
...
)
</insert>
<insert id="insertIssue" parameterType="devlog.dto.IssueDto">
<selectKey keyColumn="ISSUE_ID,ISSUE_NO" keyProperty="issueId,issueNo" resultType="devlog.dto.IssueDto" order="BEFORE" >
SELECT
(SELECT MAX(ISSUE_ID) + 1 FROM ISSUE) AS ISSUE_ID
,(SELECT MAX(ISSUE_NO) + 1 FROM ISSUE) AS ISSUE_NO
FROM DUAL
</selectKey>
INSERT INTO ISSUE (
ISSUE_ID
,ISSUE_NO
...
) VALUES (
#{issueId}
,#{issueNo}
...
)
</insert>
댓글 영역