본문 바로가기

MyBatis

MyBatis Insert 자동 증가값 가져오기

반응형

DB에서의 자동 증가값은 숫자형식으로 사용자가 해당컬럼을 제외하고 Insert 시에 설정된 값이 자동으로 들어간다.
DBMS의 종류에 따라 그 명칭이 다른데 MsSqL의 경우 identity 라고 불리우며 MySQL에서는 autoincrement 라고 불리운다.

MyBatis를 이용하여 DB에 Insert시에 자동증가된 값이 있을경우 Select Key를 활용하여 자동 증가된 값을 알 수 있다.
사용자가 작은 시스템이라면 Insert후 가장 최근의 값을 별도로 호출하여 사용할 수 있겠지만, 만약 사용자가 많은 시스템이라면
Insert후 max 값을 찾는 행위는 아주 위험하다고 할 수 있다. 그 이유는 많은 사용자가 사용될 경우 본인이 insert 한 데이터 외에 타인이 삽입한 데이터의 max 값을 가져올 수 있기 때문이다.

사실 사용자가 적더라도 Insert 후 Select 쿼리를 통한 max값 찾기는 좋은 방법은 아니다.


SelectKey의 활용은 아래와 같이 하면 된다.


아래는 TB_test의 테이블에 데이터를 Insert하는 구문이다.
TB_TEST는 seq, name, age 컬럼으로 구성되어 있으며 seq는 숫자 형식으로 된 PK이며 autoincrement 설정이 되어 있다.


<insert id="insTest">

    <selectKey keyProperty="seq" resultType="int" order="after">
        SELECT last_insert_id()
    </selectKey>

    INSERT INTO TB_TEST(name, age) VALUES('홍길동', '22')

</insert>



소스단에서 사용시에는 아래와 같이 사용하면 된다.

int nowSeq = sqlSession.insert("insTest");