2013년 9월 13일 금요일

transaction 적용

/////////////////////////////



package com.jetddo.study.config;

import java.io.IOException;

import javax.sql.DataSource;

import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.jetddo.study.util.Base64Decoder;

@Configuration
public class DataSourceConfig {
 
 @Bean(destroyMethod="close")
 public DataSource dataSource() throws IOException {
  
  BasicDataSource dataSource = new BasicDataSource();
  dataSource.setDriverClassName(Base64Decoder.decode("b3JhY2xlLmpkYmMuZHJpdmVyLk9yYWNsZURyaXZlcg=="));
  dataSource.setUrl(Base64Decoder.decode("amRiYzpvcmFjbGU6dGhpbjpAMTI3LjAuMC4xOjE1MjE6b3JjbA=="));
  dataSource.setUsername(Base64Decoder.decode("amV0ZGRv"));
  dataSource.setPassword(Base64Decoder.decode("Y2RtYTIwMDQ="));
  dataSource.setDefaultAutoCommit(false);
  
  return dataSource;
  
 }
}


/////////////////////////

위의 소스를 봅시다. 아랫줄에 AutoCommit 을 false로 설정하고 있다.
true 로 설정하면 dao 에서 바로 commit 이 일어나게 된다. 문제가 발생한 경우 되돌릴수 없다.
그래서 Transaction 을 적용한다. 매우 간단하다.

ibatis 설정 xml 에 다음을 추가하자.





 
            
 
    
 
       
 
 
 
  
  

 





dao class 에 다음과 같이 설정하자

/////////////////////////////////////

package com.jetddo.study.manage.dao;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.jetddo.study.manage.model.ManageUserVo;

@Repository
@SuppressWarnings("unchecked")

public class ManageUserDao extends SqlMapClientDaoSupport {
 
 @Resource(name="sqlMapClient")
 public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
  super.setSqlMapClient(sqlMapClient);
 }
 
 @Transactional
 public List selectAll(){
  
  return (List)getSqlMapClientTemplate().queryForList("mng_usr.selectAll");
  
 }
 
 @Transactional
 public ManageUserVo selectOnebyUserUid(long usr_uid){
  
  return (ManageUserVo)getSqlMapClientTemplate().queryForObject("mng_usr.selectOnebyUserUid",usr_uid);
  
 } 
 
 @Transactional
 public void insertOne(ManageUserVo mngUsrVo){
  
  getSqlMapClientTemplate().insert("mng_usr.insertOne",mngUsrVo);

 }
 
 @Transactional
 public void deleteOnebyUserUid(long usr_uid){
  
  getSqlMapClientTemplate().delete("mng_usr.deleteOnebyUserUid",usr_uid);

 }
}

////////////////////////////////////


참고로 autocommit 을 false로 설정하면 transaction 을 통해서만 commit 이 된다.

댓글 없음:

댓글 쓰기