网站建设资讯

NEWS

网站建设资讯

Spring中@Transactional如何配置

这篇文章将为大家详细讲解有关Spring中@Transactional如何配置,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

成都创新互联专注于上蔡网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供上蔡营销型网站建设,上蔡网站制作、上蔡网页设计、上蔡网站官网定制、重庆小程序开发公司服务,打造上蔡网络公司原创品牌,更为您提供上蔡网站排名全网营销落地服务。

  • 背景:

    1. spring老版本是使用TransactionProxyFactoryBean来实现对spring的事务进行配置(缺点自己google,一大堆的缺点)

    2. spring2.x引入了AOP(面向切面的编程)

    3. 当初项目也是喜欢用spring xml方式的配置,后来项目使用spring3.x版本,看到了@Transactional注解,个人觉得挺方便和实用。(具体什么原因,说不清)

  • 上代码

    1. 
      
      
      
          
      
          
      
          
              
                  classpath:/db.properties
              
          
      
          
      
      	
      		
      		
      			classpath:/sqlmap-config.xml
      		
      		
      			classpath*:/sqlmap/*.xml
      		
      	
      
          
              
              
              
      
              stat
      
              20
              1
              60000
              1
      
              60000
              300000
      
              SELECT 'x'
              true
              false
              false
      
              true
              20
          
      
          
          
      
      	
          
      	
      
          
          
          
      
          
          
          
              
          
      
      
    2. package com.xun.spring3.src.dao;
      
      import com.ibatis.sqlmap.client.SqlMapClient;
      import org.apache.commons.lang.StringUtils;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
      
      import javax.annotation.PostConstruct;
      import java.lang.reflect.ParameterizedType;
      import java.lang.reflect.Type;
      
      /**
       * 要求每个dao的命名以 Dao结尾
       * 泛型 ENTITY - 具体哪个实体
       * 泛型 PRIMARYKEY - 具体主键的类型
       * @Date : 2014/9/7 0007 20:41
       * @From : spring3-test
       * @Author : hebad90@163.com
       */
      public class BaseDao extends SqlMapClientDaoSupport {
      
          @Autowired
          private SqlMapClient sqlMapClient;
      
          @PostConstruct
          private void initSuper() {
              /**
               * 初始化父类
               */
              super.setSqlMapClient( sqlMapClient );
          }
      
          private Class entityClass ;
      
          private String ibatisNamespace;
      
          protected BaseDao() {
              Type genType = getClass().getGenericSuperclass();
              Type[] params = ((ParameterizedType)genType).getActualTypeArguments();
              entityClass = (Class)params[0];
      
              /**
               * 获取当前 ibatis的命名空间 XxxDao 即命名空间为 xxx
               */
              this.ibatisNamespace = getIbatisNamespace( getClass() );
      
              System.out.println( "初始化当前环境成功,ibatisNamespace=["+this.ibatisNamespace+"],entityClass=[" + entityClass + "]" );
      
          }
      
          public PRIMARYKEY insert( ENTITY entity ) {
              return(PRIMARYKEY)super.getSqlMapClientTemplate().insert( this.ibatisNamespace + ".insert", entity );
          }
      
          public int update( ENTITY entity ) {
              return super.getSqlMapClientTemplate().update( this.ibatisNamespace + ".update", entity );
          }
      
          public ENTITY queryById( PRIMARYKEY primarykey ) {
              return ( ENTITY ) super.getSqlMapClientTemplate().queryForObject( this.ibatisNamespace + ".queryById", primarykey);
          }
      
          public int delete( ENTITY entity ) {
              return super.getSqlMapClientTemplate().delete( this.ibatisNamespace + ".delete", entity);
          }
      
      
          ///##############################
          private String getIbatisNamespace( Class clazz ) {
              String simpleName = clazz.getSimpleName();
              int index = StringUtils.indexOf( simpleName, "Dao" );
      
              return StringUtils.lowerCase( StringUtils.substring( simpleName, 0, index ) );
          }
      
      }
    3. @Transactional在何处使用?Spring建议我们在业务实现类上使用该注解,因为java的实现不能继承注解。所以,最好是在业务实现类上注解,这样不管中的proxy-target-class为true或者false,业务类都会启用事务机制。

    4. @Transactional的参数怎么使用?Spring中@Transactional如何配置


关于“Spring中@Transactional如何配置”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。


分享文章:Spring中@Transactional如何配置
文章网址:http://cdweb.net/article/iiicsh.html