본문 바로가기

기초 지식/DB

[MySQL] Insert 후 PK값 얻어오기 (MyBatis 사용)

임시로 만든 City라는 테이블을 살펴보겠습니다.

 

CITY_ID 가 PK 이면서 AI(auto increment)로 사용하는 입장에서는 다음 id를 쉽게 유추할 수 없습니다.

 

이 PK 값을 바로 가져와서 insert에 활용하는 등 여러가지 상황이 있을 수 있으니 얻어와보도록 하겠습니다.

이번 예제에서는 MyBatisSelectKey를 사용해서 쿼리를 작성합니다.

 

쿼리

<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