ibatis Transaction

SQL/IBATIS 2014. 2. 12. 20:51
728x90
반응형

http://zemba.tistory.com/103




우선 ibatis연동 설정은 참고기때문에 그냥 적는다.


어짜피 지금까지 잘 auto-commit이 되고있었으니까 Data-Source가 등록되어있을것이다.
그래도 혹시 설정한번 적는다.

<beans xmlns="http://www.springframework.org/schema/beans"    
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:aop="http://www.springframework.org/schema/aop" 
            xmlns:tx="http://www.springframework.org/schema/tx"
 
            xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

      
  <!-- transaction -->
        <tx:annotation-driven transaction-manager="txManager" />

  <bean id="txManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" />
        </bean>

        <!-- DBCP 설정 부분 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
           <property name="url" value="ip및SID" />
           <property name="username" value="계정" />
           <property name="password" value="비번" />
        </bean>


<!-- iBatis 와 DBCP 연동을 위한 설정  -->

        <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
            <property name="configLocation" value="WEB-INF/config/ibatis/SqlMapConfig.xml" />
            <property name="dataSource" ref="dataSource" />
        </bean>
<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">    <property name="sqlMapClient" ref="sqlMapClient" />
        </bean>


위와 같이 등록해 준 Data-Source를 사용하여 Ibatis를 사용할 예정이다.

기본적으로 ibatis의 excutor객체를 살펴보면 autoTransaction메서드롤 호출해서 어떠한 짓을 하는것 같다.
그렇기 때문에 그것을 수동으로 변경해 줄수있다.

DAO를 만들자!
 public class Transaction extends SqlMapClientDaoSupport 
{
     public void Method명(List alParam) throws Exception
    {
                //Connection Pool을 가져오는 듯함.
SqlMapClientTemplate sqlTemplate = getSqlMapClientTemplate();
SqlMapClient sqlMapClient = sqlTemplate.getSqlMapClient();

sqlMapClient.startTransaction();                                //Transaction 시작
             //여기서 autoCommit설정을 변경해준다.!!!
             sqlMapClient.getCurrentConnection().setAutoCommit(false);
             sqlMapClient.commitTransaction();               //autoCommit의 설정 Commit
try 
{
sqlMapClient.startBatch();
for( int i=0; i < alParam.size() ; i++ )
{
HashMap hm = (HashMap) alParam.get(i);
int inCount = (Integer) sqlMapClient.queryForObject("xml-Mapping이름", "파라메터");
if( inCount==0)
       {
                                      //여기서 Insert호출
                                      sqlMapClient.queryForObject("xml-Mapping이름", hm));
}
}
sqlMapClient.executeBatch();
sqlMapClient.commitTransaction();                         //Transaction Commit!!
sqlMapClient.getCurrentConnection().commit();       //connection Commit!!
}
catch (SQLException e) 
{
e.printStackTrace();
finally 
{
sqlMapClient.endTransaction();         //트랜잭션 종료
}
        }
}


위와 같이 구현하면된다.
파란색 부분이 실제로 Transaction이 걸리는 부분이기때문에 여기에서 오류가 발생할경우는 
Commit되기전에 RollBack이 실행된다.
실제로 저부분에 insert후 Update가 발생하는 로직이든 
Data의 입력,수정,삭제시의 오류시 RollBack이 가능한다.

이로서 Ibatis에서 auto-Commit의 문제점을 해결하여 작업을 수월하게 진행할수 있다.
728x90
반응형

'SQL > IBATIS' 카테고리의 다른 글

DynamicQuery 사용법  (0) 2014.02.12
iBatis LIKE 구문 쓸때....-_______-.....  (0) 2014.02.12
ibatis like 사용법  (0) 2014.02.12
ibatis dynamic query  (0) 2014.02.12
ibatis mysql rownum  (0) 2014.02.12
ibatis multiple update  (0) 2014.02.12
ibatis $ # 차이  (0) 2014.02.12
ibatis iterate ( map , list , array )  (0) 2014.02.12
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,