반응형
Notice
Recent Posts
Recent Comments
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

veggie의 기술기록

[Spring] getSqlMapClient VS getSqlMapClientTemplate in iBatis 본문

IT_Spring

[Spring] getSqlMapClient VS getSqlMapClientTemplate in iBatis

예지콩먹어콩 2021. 11. 20. 14:16
반응형

자바 스프링 프레임워크에서는 IBATIS를 사용해서 데이터베이스에 접근하기 위해 SqlMapClientDaoSupport라는 DAO클래스를 사용한다.

그리고 SqlMapClientDaoSupport 클래스는 실질적인 데이터 조작 및 접근을 위해 2가지 형태의 메서드를 제공한다.

이 두가지 메서드는 데이터 베이스의 실질적인 데이터에 접근해서 처리하는 것은 같지만 트랜잭션에서 차이를 보인다.

 

1. getSqlMapClientTemplate() : 요청한 작업을 즉시 실행하며, 바로 COMMIT 처리 된다. 자동으로 트랜잭션 처리가 됨.

 

EX) for (i = 0; i < 100; i++) {

    getSqlMapClientTemplate().insert();

}

2. getSqlMapClient() : 사용자가 명시적으로 최종 트랜잭션 처리를 할 떄까지는 완료처리가 되지 않는다. 이러한 방식을 로컬 트랜잭션(Local Transaction)이라하고 일괄처리기법(Batch Processing) 이라고 한다.

 

EX) getSqlMapClient().startTransaction();

getSqlMapClient().startBatch();

for (i = 0; i < 100; i++) {

    getSqlMapClient().insert();

}

getSqlMapClient().executeBatch();

getSqlMapClient().endTransaction();



위의 두 쿼리가 루프문을 수행하다가 51번째 쿼리에서 Exception 에러가 발생했다고 가정하자.

 

getSqlMapClientTemplate()의 경우 매 요청마다 자동 COMMIT 처리가 되므로, 50번의 COMMIT이 발생했을 것이다.

 

하지만 getSqlMapClient()의 경우에는 요청 후 자동 COMMIT 처리가 되지 않고, endTransaction이 정상적으로 호출되지 않은 상태로 루프문이 종료되었기 때문에 startTransaction 이후 실행된 모든 요청은 취소되고 롤백된다. 명시적으로 최종 트랜잭션 처리가 되어야 하기 때문에 (endTransaction) 한 건의 COMMIT도 발생하지 않은 상태가 될 것이다.

 

일반적으로는 한건의 쿼리만 처리한다면 getSqlMapClientTemplate()을 사용하면 되는데, 여러건의 쿼리를 하나의 트랜잭션으로 묶어 처리해야 하는 경우에는 getSqlMapClient()을 이용하는게 속도나 효율성 면에서 더 좋다고 한다.

예를들면 입소와 동시에 이력이 기록되어야하고, 자동적으로 담당자가 배정되는 행위가 하나의 절차로 실행되어야 하는 경우가 있겠다. 위의 경우는 동시에 모두 실행되거나 실행되지 않아야 하기 때문에 하나의 쿼리라도 오류가 발생하는 경우 모두 롤백시키고 alert을 띄워주거나 해야한다.

 

출처 : https://ooz.co.kr/72

 

getSqlMapClient VS getSqlMapClientTemplate in iBatis

JAVA Spring Framework에서는 iBatis 를 사용하여 DB에 접근하기 위해 SqlMapClientDaoSupport 이란 DAO 클래스를 사용합니다. 그리고 SqlMapClientDaoSupport 클래스는 실질적인 데이터 조작 및 접근을 위해 다음..

ooz.co.kr

 

반응형
Comments