Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Linux
- Python
- docker
- IntelliJ
- git
- analytics4
- pem
- spring
- iBatis
- oracle
- mssql
- Javascript
- DBMS
- PostgreSQL
- isNotEmpty
- java
- 티스토리챌린지
- github
- 명령어
- mysql
- MongoDB
- JPA
- MariaDB
- 자바
- 오블완
- pandas
- isempty
- 호이스팅
- 리눅스
- SQL
Archives
- Today
- Total
hanker
Spring - iBatis 와 MyBatis에서 selectKey 사용법 (INSERT 시 PK 가져오기) 본문
반응형
selectKey는 데이터 삽입(INSERT) 시 자동 생성된 키(Primary Key) 값을 가져오기 위해 사용하는 기능이다.
iBatis와 MyBatis 모두 selectKey를 지원하지만, 두 프레임워크에서 사용하는 방식에 차이가 있다.
이번 글에서는 iBatis와 Mybatis에서 selectKey의 사용법과 차이점을 알아보자.
1. iBatis에서 selectKey
selectKey는 데이터베이스에 INSERT를 수행할 때, 시퀀스나 자동 생성 키 값을 조회하여 객체에 할당하기 위해 사용한다.
- selectKey 태그 옵션
- type 옵션
- type="pre": INSERT 실행 전에 키 값을 조회하여 해당 값을 INSERT 쿼리에 사용
- type="post": INSERT 실행 후에 키 값을 조회하여 객체의 프로퍼티에 할당
- keyProperty:
- 조회된 키 값이 할당될 객체의 프로퍼티 이름을 지정
- resultClass:
- 조회된 키의 데이터 타입을 지정
- type 옵션
사용 예제
<!-- iBATIS 매핑 파일 예제 -->
<insert id="insertUser" parameterClass="User">
<!-- type 옵션: pre 방식으로, INSERT 전 키 조회 -->
<selectKey keyProperty="id" resultClass="int" type="pre">
SELECT SEQ_USER.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO USERS (ID, NAME, EMAIL)
VALUES (#id#, #name#, #email#)
</insert>
- <insert> 태그의 id는 매핑 파일 내에서 호출되는 INSERT 문의 식별자이며, parameterClass는 전달되는 파라미터의 객체 타입이다.
- <selectKey> 태그 내의 SQL 문은 시퀀스 값을 조회하는 쿼리로, Oracle의 경우 DUAL 테이블을 사용하여 시퀀스의 다음 값을 가져온다.
- keyProperty는 조회된 시퀀스 값이 저장될 객체의 프로퍼티(예, id)이며, resultClass는 반환값의 데이터 타입을 의미한다.
- 이 방식(pre)은 INSERT 실행 전에 키 값을 조회하여, INSERT문의 VALUES 절에서 해당 키 값을 사용할 수 있도록 한다.
2. MyBatis에서 selectKey
iBatis에서 사용하는 이유와 동일하다.
- selectKey 태그 옵션
- keyProperty
- 조회된 키 값을 저장할 객체 내의 프로퍼티 이름을 지정
- 예를 들어, User 객체의 id 프로퍼티에 값을 할당하고 싶다면 keyProperty="id"로 지정
- resultType
- 키 조회 결과의 데이터 타입을 지정
- 일반적으로 int, long, String 등 데이터베이스 키 타입에 맞게 설정
- order
- 키 값을 조회하는 시점을 지정하는 옵
- BEFORE: INSERT 실행 전에 키 값을 조회
- AFTER: INSERT 실행 후에 키 값을 조회
- keyProperty
사용 예제
<!-- MyBatis 매핑 파일 예제 -->
<insert id="insertUser" parameterType="User">
<!-- INSERT 전에 시퀀스 값을 조회 -->
<selectKey keyProperty="id" resultType="int" order="BEFORE">
SELECT SEQ_USER.NEXTVAL FROM DUAL
</selectKey>
INSERT INTO USERS (ID, NAME, EMAIL)
VALUES (#{id}, #{name}, #{email})
</insert>
- keyProperty="id": 조회된 시퀀스 값이 User 객체의 id 프로퍼티에 할당
- resultType="int": 반환되는 시퀀스 값의 타입을 정수형으로 지정
- order="BEFORE": INSERT 문 실행 전에 시퀀스 값을 미리 조회하여 INSERT 쿼리 내에서 사용
반응형
'SPRING' 카테고리의 다른 글
iBatis - isEmpty / isNotEmpty 사용 방법 (null or 빈 값 체크) (0) | 2025.03.17 |
---|---|
iBatis - isEqual / isNotEqual (문자열 비교) (0) | 2025.03.12 |
Spring - MaBatis 사용 시 VO/DTO vs Collection 장단점 (0) | 2025.02.21 |
Spring - 각 DBMS 별 페이징 처리 방법 (0) | 2025.02.13 |
Spring - RESTful API Http 응답 제어하기 (ResponseEntity 사용법) (0) | 2024.12.08 |