spring 声明式事务处理及测试用类,其他未列出。

原创 2011年01月24日 16:36:00

1、首先给出配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
        </property>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl">
        </property>
        <property name="username" value="report"></property>
        <property name="password" value="neusoft"></property>
    </bean>
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource" />
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">
                    org.hibernate.dialect.Oracle9Dialect
                </prop>
                <prop key="hibernate.show_sql">
                    true
                </prop>
            </props>
        </property>
        <property name="mappingLocations">
            <list>
                <value>classpath:com/models/*.hbm.xml</value>
            </list>
        </property>
    </bean>

    <!-- 配置事务管理器,需要依赖注入一个sessionFactory. -->  
     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
      <property name="sessionFactory"><ref local="sessionFactory"/></property>  
    </bean> 
    <!--  配置事务拦截器,需要依赖注入一个事务管理器,指明事务的传播属性。-->  
   <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor">   
       <property name="transactionManager" ref="transactionManager"/>  
       <property name="transactionAttributes">  
          <props>  
               <prop key="save*">PROPAGATION_REQUIRED</prop>  
               <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>  
              <prop key="*">PROPAGATION_REQUIRED</prop>  
            </props>  
       </property>  
   </bean>  
   <!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用,因此没有id属性,指定对满足哪些bean name的bean自动生成业务代理-->  
   <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
        <property name="beanNames">  
           <list>  
               <value>welcome</value>  
          </list>   
       </property>   
       <property name="interceptorNames">  
          <list>  
               <value>transactionInterceptor</value>   
            </list>  
      </property>  
   </bean>  

    <bean name="/welcome" class="com.huangyz.struts.action.WelcomeYou">
     <property name="welcome">
      <ref bean="welcome"></ref>
     </property>
    </bean>
    <bean name="welcome" class="com.huangyz.applogic.impl.Welcome">
        <property name="usersDao">
            <ref bean="UsersDAO"></ref>
        </property>
        <property name="user">
            <ref bean="user"></ref>
        </property>
    </bean>
    <bean id="UsersDAO" class="com.huangyz.dao.impl.UsersDAO">
        <property name="sessionFactory">
            <ref bean="sessionFactory" />
        </property>
    </bean>
    <bean id="user" class="com.huangyz.entity.Users" ></bean>
</beans>

2、给出我的测试类:

package com.huangyz.applogic.impl;
import com.huangyz.applogic.interfaces.IWelcome;
import com.huangyz.dao.impl.UsersDAO;
import com.huangyz.entity.Users;
/**
* @see:数据库中给的password的最大长度为8,在这里做的是事务测试,如果起作用,那么数据库中一条都不会插入,
* 反之,会插入一条。
* @author huangyz
*
*/
public class Welcome implements IWelcome {
    private UsersDAO usersDao;
    private Users user;
    public void welcome() {
        user.setName("transManaged12");
        user.setPassword("12345678");
        usersDao.save(user);
        /*下面代码保证两次都是插入,这里改变了实体在session中的状态*/
        usersDao.getSessionFactory().getCurrentSession().evict(user);
        user.setName("tranManaged13");
        user.setPassword("123456789");
        usersDao.save(user);
    }
    public void setUsersDao(UsersDAO usersDao) {
        this.usersDao = usersDao;
    }
    public void setUser(Users user) {
        this.user = user;
    }
}

相关文章推荐

spring声明式事务处理(使用jdbc操作数据库)

声明式:针对编程人员,声明spring容器遇到哪些目标方法时需要开启事务,哪些不用开启事务。 事务处理:把事务处理交给spring容器来完成。 spring声明式事务处理的目标: 让程序...
  • andy_px
  • andy_px
  • 2015年09月23日 17:10
  • 419

Spring声明式事务处理理解

1、事物有四个特性:原子性、一致性、隔离性、持久性。 2、对于一次操作要么全部执行成功,要么全部不成功,这就是原子性,这也是很重要的一个特性,对于一次转账操作,对于中间的任何一个环节不成功,那么整个...
  • akwolf
  • akwolf
  • 2011年10月14日 12:54
  • 685

Spring3.1.1 + Hibernate3.6.8 之声明式事务处理

第一种方式:使用Annotation xml:

Spring——声明式的事务处理

Spring声明式的事务处理

《Spring》------声明式事务处理

- 前言提到对数据库的CRUD操作就想到了事务,在之前做过的项目中操作事务时,用到的是Spring框架,Spring的声明式事务处理将,操作起来相对于JDBC来说,简单了很多,其目的是让程序员不再关注...

spring声明式事务处理(hibernate)

spring声明式事务处理(使用hibernate操作数据库) 在上一个博文我们讨论到了spring声明式事务处理与jdbc的整合。 思路: 1、无论是jdbc还是hibernate,都要使用到d...
  • andy_px
  • andy_px
  • 2015年09月24日 16:39
  • 215

Spring学习之声明式事务处理实例(DriverManagerDataSource注入)

首先建立helloDao.java用来处理数据 package com.gc.action; import javax.sql.DataSource; import org.springframe...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring 声明式事务处理及测试用类,其他未列出。
举报原因:
原因补充:

(最多只允许输入30个字)