728x90
반응형
우선 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 |