본문 바로가기
IT/Java

[iBATIS 2.x] insert 성공 여부 판단

by yjacket 2010. 11. 18.

1. insert 전에는 추가할 레코드의 기본키가 무엇이 될 지 모르는 경우 selectKey 를 이용해 추가된 레코드의 기본키를 반환 받아 확인한다.

iBATIS 2.x 의 insert 메서드는 selectKey 와 함께 쓰일 경우 기본키 객체에 추가된 레코드의 기본키를 넣어 반환한다.

ProductDao.java

public class ProductDao
{
    SqlMapClient sqlMapClient;

    public boolean insertProduct(Product product)
    {
        Integer id = (Integer) sqlMapClient.insert(“insertProduct”, product);
        return id > 0; // product.productId 에도 같은 값이 저장됨
    }
}

Product.xml

<insert id="insertProduct">
    <selectKey keyProperty="productId" resultClass="int" type="pre">
        SELECT S_Products.NEXTVAL FROM DUAL
    </selectKey>

    INSERT INTO Products VALUES (#productId#, #productName#, #productCode#)
</insert>

 

2. insert 전에 추가할 레코드의 기본키를 알고 있을때는?

본키를 이미 알고 있다면, 기본키를 이용한 성공여부 판단이 불가능하기 때문에 insert 구문을 update 메서드로 실행하여 영향 받은 행수를 평가한다.

ProductDao.java

public class ProductDao
{
    SqlMapClient sqlMapClient;

    public boolean insertProduct(Product product)
    { 
        int rows = sqlMapClient.update(“insertProduct”, product);
        return rows > 0;
    }
}

Product.xml

<insert id="insertProduct">
    INSERT INTO Products VALUES (#productId#, #productName#, #productCode#)
</insert>

 

3. 신뢰할 만하다고들 하는 또 다른 방법

예외를 잡는 것 만으로도 상당히 신뢰할만한 성공여부 판단을 할 수 있다고들 한다. 단, 개인적으로는 왠지 찝찝하다. 가급적이면 1, 2 방법으로 판단하고 도저히 방법이 없을 경우에 시도해보도록 하자. 또, 프로시저, 함수를 이용해 DBMS 에게 성공여부를 판단하도록 하는것도 한 방법이 될 수 있다.