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
SELECT S_Products.NEXTVAL FROM DUAL
INSERT INTO Products VALUES (#productId#, #productName#, #productCode#)
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 INTO Products VALUES (#productId#, #productName#, #productCode#)
3. 신뢰할 만하다고들 하는 또 다른 방법
예외를 잡는 것 만으로도 상당히 신뢰할만한 성공여부 판단을 할 수 있다고들 한다. 단, 개인적으로는 왠지 찝찝하다. 가급적이면 1, 2 방법으로 판단하고 도저히 방법이 없을 경우에 시도해보도록 하자. 또, 프로시저, 함수를 이용해 DBMS 에게 성공여부를 판단하도록 하는것도 한 방법이 될 수 있다.
출처 : http://yjacket.tistory.com/51

11 Replies to “iBatis : insert return value”