myBatis mssql insert 후 바로 시퀀스값 select 하기


MS SQL 테이블 값 인서트하면 자동증가 컬럼 값을 가져오는 방법이 애매해서 찾아보던 중

<selectKey keyProperty> 라는 것을 알게 되어 정리~



<Controller>

1
2
3
4
5
6
7
@RequestMapping(value="/test", method=RequestMethod.GET)
public void testPush(@RequestParam HashMap<String, Object> paramMap, HttpServletRequest request, HttpServletResponse response) throws Exception {
    
    pushService.insertPush(paramMap);
    int pushIdx = (int) paramMap.get("idx");
    
}
cs


HashMap 을 paramMap 이라는 이름의 파라미터로 TABLE_PUSH 에 인서트 하도록 한다


테이블 TABLE_PUSH 의 구조는

IDX(int), SUBJECT(String), MESSAGE(String) 컬럼 3개




<Mapper>

1
2
3
4
5
6
7
8
9
<insert id="insertPush" parameterType="map">
    INSERT INTO TABLE_PUSH (SUBJECT, MESSAGE)
    VALUES (#{subject},
            #{message}            
           );
    <selectKey keyProperty="idx" resultType="Integer" order="AFTER">
        SELECT IDENT_CURRENT('TABLE_PUSH')
    </selectKey>
</insert>
cs


<selectKey keyProperty="컬럼명" resultType="컬럼타입" order="실행시기">

SELECT IDENT_CURRENT('테이블명')



그렇게 하면 <insert> 의 parameterType="map" 으로 썼던 파라미터 paramMap 의 idx 에

현재 자동증가값이 얼마인지 들어가 있게 된다





또는 useGeneratedKeys 를 사용할 수도 있다

1
2
<insert id="insertData" parameterType="DataClass" useGeneratedKeys="true" keyProperty="id">
 
cs


+ Recent posts