임시로 만든 City라는 테이블을 살펴보겠습니다.
CITY_ID 가 PK 이면서 AI(auto increment)로 사용하는 입장에서는 다음 id를 쉽게 유추할 수 없습니다.
이 PK 값을 바로 가져와서 insert에 활용하는 등 여러가지 상황이 있을 수 있으니 얻어와보도록 하겠습니다.
이번 예제에서는 MyBatis의 SelectKey를 사용해서 쿼리를 작성합니다.
쿼리
<insert id="insertCity" parameterType="com.example.model.City">
/*keyProperty는 결과값을 넣을 model의 변수명*/
/*order(BEFORE, AFTER)를 통해 Insert 쿼리를 실행 후 가져올지 그 전에 가져올지 정할 수 있다*/
<selectKey resultType="int" keyProperty="cityId" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO USER_INFO (
CITY
, COUNTRY_ID
, LAST_UPDATE
)
VALUES (
'서울'
, 82
, NOW()
)
</insert>
모델
class City() {
int cityId;
String city;
int countryId;
LocalDateTime lastUpdate;
}
위와 같이 진행하면 parameter로 넣었던 City 클래스 변수의 cityId에 값이 들어가게 된다.
사용할 때는 쿼리의 parameter로 전달한 변수에서 key값을 꺼내어 사용하면 된다.
사용 예시
City cityParam = new City();
cityRepository.insertCity(cityParam);
// cityParam.getCityId() 하면 값이 들어가 있다.
반응형
'기초 지식 > DB' 카테고리의 다른 글
[JPA] 낙관적 Lock, 비관적 Lock (1) | 2024.01.05 |
---|---|
[DB] Transation Isolation Level (0) | 2022.01.13 |
[MyBatis] 마이바티스의 #{}, ${} 차이 (0) | 2021.08.26 |
DB의 결합 인덱스에 관해서 (0) | 2021.08.23 |
[Oracle] Partitioned index (0) | 2020.09.18 |