본문 바로가기

IT 개념

Spring myBatis, selectKey 태그

프로젝트에서 selectkey 를 사용할 일이 있는데, 잘이해가 되지 않아서 찾아보았습니다.

notice_bno 에 selectKey 구문의 결과가 셋팅되고

resultType 은 Integer 형이며

order AFTER 로 insert 구문을 실행한 뒤 selectKey 구문이 실행됩니다.

첨부파일과 연관되었기 때문에 이렇게 하는건데.. 조금 더 구체적인 이유는 강사님께 여쭈어보고 수정하겠습니다.

https://yookeun.github.io/java/2014/07/11/mybatis-selectkey/

 

mybatis에서 selectKey 사용법

mybatis에서 selectKey 사용법 Jul 11, 2014 DB작업을 하다보면 먼저 사전에 어떤 키값을 가져와서 증가시켜서 입력하거나 혹은 입력후에 증가된 키값을 가져올 필요가 있다. 이럴때 mybatis에서 제공하는 selectKey를 이용하면 별도의 쿼리로직을 등록할 필요없이 해당 메소드에서 일괄처리할 수가 있다. 샘플로 아래와 같은 board테이블이 있다고 하자(mysql, mariadb) create table board ( iq int not null auto_increment , boardID varchar ( 2...

yookeun.github.io

SQL 수행작업 중 insert 된 이후에 알 수 있는 값 또는, 생성된 값을 바로 가져와서 select 쿼리를 보내야 하는 경우가 있습니다.

주로 생성하고 난 후의 인덱스(번호)를 가져와 작업해야 하는 상황에서 많이 사용합니다.

selectKye는 DB에 명령을 한번만 보내며, 우선 입력한 값의 결과값을 다음 쿼리로 바로 return 시켜줍니다.

https://mybatis.org/mybatis-3/ko/sqlmap-xml.html

 

MyBatis – 마이바티스 3 | 매퍼 XML 파일

Mapper XML 파일 마이바티스의 가장 큰 장점은 매핑구문이다. 이건 간혹 마법을 부리는 것처럼 보일 수 있다. SQL Map XML 파일은 상대적으로 간단하다. 더군다나 동일한 기능의 JDBC 코드와 비교하면 아마도 95% 이상 코드수가 감소하기도 한다. 마이바티스는 SQL을 작성하는데 집중하도록 만들어졌다. SQL Map XML파일은 첫번째(first class)엘리먼트만을 가진다. cache - 해당 네임스페이스을 위한 캐시 설정 cache-ref - 다른 네임스페이스의 캐시 설정에 대한 참조 resu...

mybatis.org

마이바티스는 자동생성키 칼럼을 지원하지 않는 다른 데이터베이스를 위해 다른 방법 또한 제공한다.

이 예제는 랜덤 ID 를 생성하고 있다.

<insert id="insertAuthor"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1 </selectKey> insert into Author (id, username, password, email,bio, favourite_section) values (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR}) </insert>

위 예제에서 selectKey구문이 먼저 실행되고 Author id프로퍼티에 셋팅된다. 그리고 나서 insert 구문이 실행된다. 이건 복잡한 자바코드 없이도 데이터베이스에 자동생성키의 행위와 비슷한 효과를 가지도록 해준다.

selectKey 엘리먼트는 다음처럼 설정가능하다.

<selectKey keyProperty="id" resultType="int" order="BEFORE" statementType="PREPARED">

selectKey 엘리먼트 속성

속성 설명
keyProperty selectKey구문의 결과가 셋팅될 대상 프로퍼티.
keyColumn 리턴되는 결과셋의 칼럼명은 프로퍼티에 일치한다. 여러개의 칼럼을 사용한다면 칼럼명의 목록은 콤마를 사용해서 구분한다.
resultType 결과의 타입. 마이바티스는 이 기능을 제거할 수 있지만 추가하는게 문제가 되지는 않을것이다. 마이바티스는 String을 포함하여 키로 사용될 수 있는 간단한 타입을 허용한다.
order BEFORE 또는 AFTER를 셋팅할 수 있다. BEFORE로 설정하면 키를 먼저 조회하고 그 값을 keyProperty 에 셋팅한 뒤 insert 구문을 실행한다. AFTER로 설정하면 insert 구문을 실행한 뒤 selectKey 구문을 실행한다. 오라클과 같은 데이터베이스에서는 insert구문 내부에서 일관된 호출형태로 처리한다.
statementType 위 내용과 같다. 마이바티스는 Statement, PreparedStatement 그리고 CallableStatement을 매핑하기 위해 STATEMENT, PREPARED 그리고 CALLABLE 구문타입을 지원한다.

'IT 개념' 카테고리의 다른 글

MultipartFile API  (0) 2021.06.30
자바 File 클래스  (0) 2021.06.30
MySQL 재귀복사  (0) 2021.06.28
내가 정리해보는 Spring 게시판 만드는 순서(정답X)  (0) 2021.06.23
HTTP ? HTTPS?  (0) 2021.06.22