본문 바로가기
자바웹프로그래밍/mybatis

[mybatis] selectKey 사용법

by 디찌s 2020. 4. 8.
728x90
반응형

웹프로그래밍에서 db작업을 하다보면 사전에 어떤 키값을 가져와서 증가시키고 입력하고 혹은 입력후에 증가된 키값을 가져올 필요가 있다.

 

이럴때 mybatis에선 selectKey라는 것을 제공하는데 별도의 쿼리로직을 등록할 필요없이 해당 메소드에서 일괄 처리할수있다.

 

아래와 같은 board테이블이 있다고 가정하자

create table board(
id int not null auto_increment,
boardID varchar(20) not null,
title varchar(50) not null,
content text not null,
primary key(id),
unique(boardID)
);

id 값은 자동증가하고 boardID는 unique하게 증가되서 입력되어야한다.

 

입력하기전에 특정키값을 가져온후 그값을 이용해서 처리해보자

아래처럼 만약 board라는 게시판에서 입력을 수행히 boardID값을 기존에 최대값에 +1한 다음에 그값을 입력하고 싶다면 아래의 같이 처리하면 된다.

 

<insert id="insertBoard" parameterType="Board">
	<selectKey resultType="string" keyProperty="boardID" order="BEFORE">
    	SELECT MAX(boardID)+1 FROM board
    </selectKey>
    INSERT INTO board(boardID,title,content)
    VALUES(#{boardID},#{title},#{content})
</insert>

<selectKey>구문을 <insert>구문에 넣어준다. resultType은 해당 컬럼의 타입으로 정해주면 된다.

keyProperty는 컬럼명이다. Board 클래스에서는 boardID가 setter,getter메소드가 존재해야 한다.

 

order는 해당쿼리의 순서를 의미한다. BEFORE라면 insert쿼리문 수행전에 selectkey가 실행된다 위에서는 기존 BoardID를 가져오는 부분이기 때문에 당연히 order=BEFORE를 사용한다

 

 

 

 

728x90
반응형

댓글