Java에서 Mybatis generator를 이용해서 Mapper.xml을 자동으로 생성할 수 있다. 하지만 기본적으로 있는 insert()와 insertSelective()를 사용하면 시퀀스값을 가져올 수가 없다.
이럴 때는 Mapper.xml을 추가로 구현해 주면 된다.
속성값에 대한 자세한 설명은 여기를 참고해주세요.
TestMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<mapper namespace="mapper.TestMapper">
... 쿼리 또는 trim 형태의 key, value 쌍
<selectKey keyProperty="id" resultType="long" order="AFTER">
SELECT currval('seq_test');
</selectKey>
</insert>
</mapper>
일단 기본적으로 generator에서 만들어진 insertSelective의 <insert>...</insert> 문을 복사해준다. 그리고 그 안에 <selectKey>...</selectKey> 의 태그를 넣어주면 된다. 물론 자신의 코드에 맞게 조금은 수정해 줘야 한다.
- id: 구문을 찾기위한 구분자
- parameterType: 구문에 전달될 파라미터의 패키지 경로를 포함한 전체 클래스 명이나 별칭
- keyProperty: selectKey 하위 엘리먼트에 의해 리턴된 키를 셋팅할 프로퍼티를 지정. 디폴트는 셋팅하지 않는 것이다. 여러개의 컬럼을 사용한다면 프로퍼티명에 콤파를 구분자로 나열할 수 있다.
- resultType: selectKey 하위 엘리먼트에 의해 리턴될 값의 타입
- order: (BEFORE/AFTER)
- BEFORE: 키를 먼저 조회하고 그 값을 keyProperty에 셋팅한 뒤 insert 구문 실행
- AFTER: insert 구문을 실행한 후 selectKey 구문을 실행
TestMapper.java
return getSqlSession().insert("mapper.TestMapper.insertSelective", param);
}
서비스 구현 부분
'Java, Spring' 카테고리의 다른 글
[Spring Boot] custom error page (0) | 2018.09.27 |
---|---|
[Java, Mybatis] foreach 문법 (0) | 2017.03.20 |
[Java] Mybatis mapper.xml 비교연산자 <, >, <=, => 처리 방법 (0) | 2017.02.15 |
[Java] String to timestamp (0) | 2017.02.02 |
[Java] Spring MVC path pk (0) | 2017.01.31 |
댓글