SQL
mapper 서브쿼리 작성 두가지 방법 (selectKey)
머리방울
2022. 9. 21. 14:16
실무에서는 반반 정도 쓴다고 한다.
첫번째 방법 (일반적인 방법)
<insert id="regNewEmp">
INSERT INTO TEST_EMP(
EMP_NUM
, EMP_NAME
, POSITION
, EMP_AGE
, DEPT_NUM
, GENDER
, EMP_TELL
)VALUES(
(SELECT 'EMP'||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(EMP_NUM,4))),0)+1, 3 ,0) FROM TEST_EMP)
, #{empName}
, #{position}
, #{empAge}
, #{deptNum}
, #{gender}
, #{empTell}
)
두번째 방법(selectKey 사용)
<insert id="regNewEmp">
<selectKey resultType="String" keyProperty="empNum" order="BEFORE">
SELECT 'EMP'||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(EMP_NUM,4))),0)+1, 3 ,0) FROM TEST_EMP
</selectKey>
INSERT INTO TEST_EMP(
EMP_NUM
, EMP_NAME
, POSITION
, EMP_AGE
, DEPT_NUM
, GENDER
, EMP_TELL
)VALUES(
#{empNum}
, #{empName}
, #{position}
, #{empAge}
, #{deptNum}
, #{gender}
, #{empTell}
)
selectKey
<selectKey resultType="String" keyProperty="empNum" order="BEFORE">
</selectKey>
-resultType = 결과를 자료형 어디에 담을 것인지?(String, int...)
- order = 쿼리 실행순서 before와 after가 있다
before insert 실행 전에 먼저 실행하겠다
after insert 실행 후 실행하겠다.
- keyProperty = 조회해서 어디에 담을래? (변수명 자체를 지정)