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 = 조회해서 어디에 담을래? (변수명 자체를 지정)