Develop

[Mybatis] useGeneratedKeys 사용 방법 + insert시 결과 값이 1만 나올 때 본문

웹 개발/Spring

[Mybatis] useGeneratedKeys 사용 방법 + insert시 결과 값이 1만 나올 때

개발 기록 2024. 6. 21. 13:05

 

<사용법>

useGeneratedKeys="true"

keyProperty="내가 원하는 값을 받아갈 변수 이름"  ex) inquiry VO에서 idx라는 변수

keyColumn=" pk로 지정한 컬럼명 "

 

을 쿼리 쪽에 추가해준다

 

 예를 들어

useGeneratedKeys="true"

keyProperty="userno" 

keyColumn="idx"

라고 지정했으면

사진처럼 db의 idx값이 userno라는 변수에 담긴다 

 

 

ex)

<insert id="insertInquiryApply" parameterType="apps.model.Inquiry" useGeneratedKeys="true" keyProperty="idx" keyColumn="idx">
		INSERT INTO /* insertInquiryApply */
			T_INQUIRY
			(
				Consult
				, Content
				, Email
			)
			VALUES
			(
				#{consult}
				, #{content}
				,#{email}
			)
	</insert>

 

 

mysql에서 pk를 auto_increment로 설정했기 때문에 쓸 수 있는거고 

나와 같은 설정이 아니라면 selectKey를 사용해야한다.

 

selectKey를 써야하는 상황

ex) mysql이 아닌 oracle DB 사용 - 시퀀스 이용해야함

ex) auto_increment 가 지정이 되지않은 pk 값 가져올 때

ex) pk가 아닌 다른값을 가져올 때 

 


 

주의할 점은

int idx = 쿼리 실행;

 

이렇게 코드를 실행해도 idx에는 1 or 다른 값만 들어온다

 

즉 파라미터 값이 VO / DTO / Map 등의 형태라면

내가 가져오고 싶었던 값은 파라미터에 담긴다

 

내가 보낸 파라미터 inquiry Vo 이다

 

쿼리 실행 후에

 

 

이렇게 원하던 idx(mySQL - PK) 값이 담겨있음을 확인할 수 있다.

 

int idx로 변수 생성해서 계속  return값을 받아오려고 했는데

그게 아니라 자동으로 담기는거였다

 


 

나는 일어나지 않았지만

검색하다 알게된 다른 오류

 

받아오는 값이 null or 이상한값이면 설정 값을 확인해보자

mybatis config 에서 defaultExecutorType 의 설정값이 batch 로 되어 있어있다면 다른 값이나 주석처리하기

다른 값으로는

SIMPLE : 아무것도 안함

REUSE : 재사용

이 있다