Mybatis의 selectKey는 데이터 베이스의 한번의 명령으로 selectkey의 결과값을 다음 쿼리에 활용하는 기능이다.
아묻따 사용법부터 보자.
<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 (#{newUserNo}, #{code}, #{name}, #{pwd})
</insert>
insert id가 insertUser로 되어있는 insert를 한번 수행하면서, selectKey에서 user_no의 시퀀스 값을 가져와 keyProperty를 이용하여 newUserNo라는 속성에 대입한다.
그리고 밑에서 #{newUserNo} 라는 이름으로 호출해 가져온 시퀀스의 값을 테이블에 insert한다.
여기서 selectKey의 옵션중에 order가 BEFORE로 지정되어있어서 insert 쿼리문 실행 전 selectKey를 먼저 수행후 반환된 시퀀스의 값을 insert 쿼리에 활용하는것이다.
기존의 회원번호가 199까지 있다고 가정하고 USER_NO.SEQ_CURRVAL을 통해 199가 반환되었다고 가정하면 아래의 insert 쿼리문에서 회원번호는 199번이 입력되어 USERS 테이블에 저장될것이다.
Key를 불러와서 다음 Key를 입력할때 주로 사용되는데 주로 MAX와 함께 사용하여 특정 테이블의 특정 컬럼의 MAX값을 구해와 거기서 + 1을 해준후 그 값을 바인딩하여 insert 쿼리문에 대입하는 방식으로 사용을 한다.
order가 AFTER로 지정된다면 Before와는 반대로 먼저 INSERT 쿼리문을 수행후에 그리고 나서 selectKey 내부의 쿼리문이 실행되게 된다.
BEFORE와 AFTER의 차이는 쿼리문 실행 전 selectKey를 수행할것인지, 후에 수행할것인지를 정하는것이다.
'Study > Database' 카테고리의 다른 글
SQL JOIN의 이해 (1) | 2024.10.02 |
---|---|
Oracle에서 기본으로 제공하는 DD(Data Dictionary) (0) | 2024.08.19 |
CLOB에 대해서 알아보자. (0) | 2024.07.22 |
Synonym(시노님) 에 대해 알아보자. (1) | 2024.07.20 |
Dbeaver(디비버)와 MariaDB(마리아DB) 연동하기(최초설치, 최초연동) (0) | 2023.07.28 |