Mybatis Insert후 return Key

[Desc]

In Oracle

Mybatis Insert한 이후 seq값을 가져오는 것에 대한 Tip입니다.

iBatis의 경우 update로 변경하여 잘되었는지 체크하지만

MyBatis의 경우는 좀 다릅니다.


[설정]

예문)
// DTO 생성
@Getter @Setter @ToString
public class TestCnclWorkInfo {
 
    private Integer testWorkSeq;
    private String workType;
}
 
 
// DAO 생성
@Override
public void insertTestWorkLog(TestCnclWorkInfo testCnclWorkInfo) throws Exception { //DAO에서 insert후에 return 값은 void이다 한마디로 return값은 없다. 하지만 insert한 객체에 mybatis에서 seq값을 담아준다.
    if(testCnclWorkInfo == null) {
        throw new NullPointerException("testCnclWorkInfo가 없습니다");
    }
    sqlSessionTmp.insert(NS+"insertTestWorkLog", testCnclWorkInfo);
}
 
 
// mapper

     //com.test.abc.dto.TestCnclWorkInfo 클래스에 testWorkSeq 변수명과 property명을 일치시킨다.
        SELECT TEST_BATCH_CNCL_WORK_LOG_SEQ.NEXTVAL testWorkSeq FROM dual
    
    INSERT INTO TEST_BATCH_CNCL_WORK_LOG (
        TEST_WORK_SEQ
        ,WORK_TYPE
    ) VALUES (
        #{testWorkSeq, jdbcType=INTEGER} //위의 selectKey에서 나온 값을 넣어준다
        ,#{workType, jdbcType=VARCHAR}
    )

// Service에서 호출 부분 TestCnclWorkInfo testCnclWorkInfo = new TestCnclWorkInfo(); //객체 생성 testCnclWorkInfo.setWorkType(batchSchCmd.getSearchType()); testCnclWorkInfo.setWorkSts(TestCnclConstants.WORK_STS_CD_REQ); testCnclDao.insertTestWorkLog(testCnclWorkInfo); if(testCnclWorkInfo.getTestWorkSeq() == null) { //insert후에 mybatis에서 seq값을 testWorkSeq에 set해준다. log.error("TEST_BATCH_CNCL_WORK_LOG insert 중 에러 발생"); throw new Exception(); }


위에 짧게 작성한 소스중에 긁어왔다.

중요한 포인트는

TestCnclWorkInfo 라는 Insert할때 쓰는 개체에 Seq값이 담아진다.

그래서 Insert후에 return 값은 void이지만 if(testCnclWorkInfo.getTestWorkSeq() == null)인지를 체크하고 있다.

Insert가 제대로 수행이 되면 Insert되어진 Seq값이 객체에 담아지기 때문이다.


이렇게 담기 위해서는 property값을 일치 시켜줘야한다.

selectKey 에서 KeyProperty명의 변수명을 TestCnclWorkInfo의 변수 testWorkSeq라고 명시해 주어야 객체 변수명에

값이 담기게 된다.


객체가 한번 생성되어지고 그 객체주소값을 가지고 있기 때문에 myBatis에서 Insert후 해당 객체에 set을 해주기 때문에

Insert한 객체에 값이 셋팅되게 되므로 해당객체의 seq값이 있는지 Null인지를 비교해보므로써

Insert가 잘 되었는지 여부를 알수 있다.



블로그 이미지

pstree

pstree.. process...

,