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 에게 성공여부를 판단하도록 하는것도 한 방법이 될 수 있다.
'IT > Java' 카테고리의 다른 글
자바 이미지 처리(썸네일, 포맷변환, 리터칭등) (0) | 2011.08.20 |
---|---|
JVM Error file(crash report) (0) | 2011.07.28 |
[iBATIS 2.x] 트랜잭션 동시성 문제 있을까? (0) | 2010.11.16 |
[iBATIS 2.x] 일괄처리, 트랜잭션 성능 (0) | 2010.11.11 |
Java Tip #2 : 큐(Queue) 성능 테스트 (1) | 2010.11.09 |