MyBatis selectKey

young·2021년 8월 19일
0

개발입문일지

목록 보기
5/7

문제👀

테이블A에서 email과 index 컬럼을 기본키로 설정하고 테이블B에서 email에 외래키를 설정하였더니, 자동으로 number타입 컬럼까지 외래키로 설정되어 mybatis상에서 email만 불러오려고 했더니 오류가 났다.
해결방법을 찾지 못해서 결국 외래키 제약조건을 삭제하고 mybatis상에서 쿼리를 이용해 컬럼값을 불러오기로 했다.
조건을 주기 위해 if문을 사용했더니 mybatis상에서 해당 쿼리를 처리하는 방법을 모르겠어서 서치하다가 selectKey의 존재에 대해 알게 되었다.

처리하려고 했던 쿼리

IF (SELECT email FROM 테이블A WHERE email = 'abcd@gmail.com')
THEN
INSERT INTO review(no, content, like, email, date)
VALUES(seq.nextval, '내용', 1, 'abcd@gmail.com', sysdate);
END IF;

해결👀

MyBatis 번역 문서

<insert id="insert" parameterType="파라미터타입">
	<selectKey keyProperty="email" resultType="결과타입" order="BEFORE">
      <if test="email != ''">
         select distinct email from 테이블A where email = #{email}
      </if>
	</selectKey>
	insert into review(no, content, like, email, date) 
   		values(seq.nextval, #{content}, #{like}, #{email}, sysdate)
</insert>

multiple selectKey를 사용해서 2개의 값을 받아오는 것도 가능하다고 한다. (출처: http://lng1982.tistory.com/228)

0개의 댓글