`
liliang_xf
  • 浏览: 62693 次
  • 性别: Icon_minigender_1
  • 来自: 湖北
社区版块
存档分类
最新评论
  • yangqk1: 不知道楼主还在关注这个么,你做的这个项目还在继续么。我真正研究 ...
    webim
  • 周超亿: 你好,我想请问下, http://code.faqee.com ...
    webim
  • 周超亿: 你好,能不能把项目打包发给我一份,谢谢 Email:zhouc ...
    webim
  • liliang_xf: SQL子查询,连接查询,数据汇总,GROUP BY,ORDER ...
    sql的
  • liliang_xf: http://www.ibm.com/developerwor ...
    webim

声明式事务处理(转账示例)

阅读更多
vo层
java 代码
  1. package org.show;   
  2.   
  3.   
  4.   
  5. /**  
  6.  * Account generated by MyEclipse - Hibernate Tools  
  7.  */  
  8.   
  9. @SuppressWarnings("serial")   
  10. public class Account  implements java.io.Serializable {   
  11.   
  12.   
  13.     // Fields       
  14.   
  15.      private Integer accountid;   
  16.      private String accountname;   
  17.      private Integer money;   
  18.   
  19.   
  20.     // Constructors   
  21.   
  22.     /** default constructor */  
  23.     public Account() {   
  24.     }   
  25.   
  26.        
  27.     /** full constructor */  
  28.     public Account(String accountname, Integer money) {   
  29.         this.accountname = accountname;   
  30.         this.money = money;   
  31.     }   
  32.   
  33.       
  34.     // Property accessors   
  35.   
  36.     public Integer getAccountid() {   
  37.         return this.accountid;   
  38.     }   
  39.        
  40.     public void setAccountid(Integer accountid) {   
  41.         this.accountid = accountid;   
  42.     }   
  43.   
  44.     public String getAccountname() {   
  45.         return this.accountname;   
  46.     }   
  47.        
  48.     public void setAccountname(String accountname) {   
  49.         this.accountname = accountname;   
  50.     }   
  51.   
  52.     public Integer getMoney() {   
  53.         return this.money;   
  54.     }   
  55.        
  56.     public void setMoney(Integer money) {   
  57.         this.money = money;   
  58.     }   
  59.       
  60.   
  61. }  

DAO层

java 代码
  1. package org.show;   
  2.   
  3. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  4.   
  5. public class AccountDAO extends HibernateDaoSupport {   
  6.   
  7.     public void addMoney(Integer accountId,int money){   
  8.   
  9.         Account account = (Account)getHibernateTemplate().get(Account.class,accountId);   
  10.         account.setMoney(account.getMoney() + money);   
  11.         getHibernateTemplate().saveOrUpdate(account);   
  12.     }   
  13.   
  14.     public void subMoney(Integer accountId,int money){   
  15.   
  16.         Account account = (Account)getHibernateTemplate().get(Account.class,accountId);   
  17.         account.setMoney(account.getMoney() - money);   
  18.         getHibernateTemplate().saveOrUpdate(account);   
  19.     }   
  20. }  
Service层
java 代码
  1. package org.show;   
  2.   
  3. public class AccountService {   
  4.   
  5.     private AccountDAO accountDAO;   
  6.     public void setAccountDAO(AccountDAO _accountDAO){   
  7.            
  8.         accountDAO = _accountDAO;   
  9.     }   
  10.     public void transfer(Integer fromAccountId, Integer toAccountId,int money){   
  11.            
  12.         accountDAO.subMoney(fromAccountId, money);   
  13.         accountDAO.addMoney(toAccountId, money);   
  14.     }   
  15. }   

测试方法

java 代码

  1. package org.show;   
  2.   
  3. import org.springframework.context.ApplicationContext;   
  4. import org.springframework.context.support.FileSystemXmlApplicationContext;   
  5.   
  6. public class Main {   
  7.   
  8.     /**  
  9.      * @param args  
  10.      */  
  11.     public static void main(String[] args) {   
  12.            
  13.         ApplicationContext act = new FileSystemXmlApplicationContext("src/applicationContext.xml");   
  14.         AccountService accountService = (AccountService)act.getBean("accountService");   
  15.         try{   
  16.                
  17.             accountService.transfer(121);   
  18.                
  19.         }catch(Exception e){   
  20.                
  21.             System.out.println("转帐失败!");   
  22.         }   
  23.     }   
  24.   
  25. }   

Account.hbm.xml映射文件

xml 代码
  1. <!---->xml version="1.0"?>  
  2. <!---->
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!---->  
  5. <hibernate-mapping>  
  6.     <class name="org.show.Account" table="account"  >  
  7.         <id name="accountid" type="java.lang.Integer">  
  8.             <column name="accountid" />  
  9.             <generator class="native" />  
  10.         id>  
  11.         <property name="accountname" type="java.lang.String">  
  12.             <column name="accountname" length="20" not-null="true" />  
  13.         property>  
  14.         <property name="money" type="java.lang.Integer">  
  15.             <column name="money" not-null="true" />  
  16.         property>  
  17.     class>  
  18. hibernate-mapping>  

 

xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8"?>  
  2. <!---->>  
  3.   
  4. <beans>  
  5. <!---->  
  6.     <bean id="dataSource"  
  7.         class="org.apache.commons.dbcp.BasicDataSource">  
  8.         <!---->  
  9.         <property name="driverClassName">  
  10.             <value>com.mysql.jdbc.Drivervalue>  
  11.         property>  
  12.         <!---->  
  13.         <property name="url">  
  14.             <value>jdbc:mysql://localhost:3306/thjvalue>  
  15.         property>  
  16.         <!---->  
  17.         <property name="username">  
  18.             <value>rootvalue>  
  19.         property>  
  20.         <!---->  
  21.         <property name="password">  
  22.             <value>1234value>  
  23.         property>  
  24.     bean>  
  25.     <!---->  
  26.     <bean id="sessionFactory"  
  27.         class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
  28.         <!---->  
  29.         <property name="dataSource">  
  30.             <ref bean="dataSource" />  
  31.         property>  
  32.         <property name="hibernateProperties">  
  33.             <props>  
  34.                 <prop key="hibernate.dialect">  
  35.                     org.hibernate.dialect.MySQLDialect   
  36.                 prop>  
  37.                 <prop key="hibernate.show_sql">trueprop>  
  38.             props>  
  39.         property>  
  40.         <property name="mappingResources">  
  41.             <list>  
  42.                 <value>org/show/Account.hbm.xmlvalue>  
  43.             list>  
  44.         property>  
  45.     bean>  
  46.     <!---->  
  47.     <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  48.     <!---->  
  49.         <property name="sessionFactory" ref="sessionFactory">property>  
  50.     bean>  
  51.   
  52.     <bean id="accountDAO" class="org.show.AccountDAO">  
  53.         <property name="sessionFactory" ref="sessionFactory">property>  
  54.     bean>   Spring配置文件
  55.     <!---->  
  56.     <bean id="accountService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">  
  57.         <!---->  
  58.         <property name="transactionManager" ref="transactionManager">property>  
  59.         <!---->  
  60.         <property name="target">  
  61.             <!---->  
  62.             <bean class="org.show.AccountService">  
  63.                 <property name="accountDAO" ref="accountDAO">property>  
  64.             bean>  
  65.         property>  
  66.         <!---->  
  67.         <property name="transactionAttributes">  
  68.             <props>  
  69.                 <!---->  
  70.                 <prop key="transfer">PROPAGATION_REQUIREDprop>  
  71.             props>  
  72.         property>  
  73.     bean>  
  74. beans>  
分享到:
评论

相关推荐

    Spring ax/aop声明式事务配置实例

    在Spring框架中,AOP(面向切面编程)和声明式事务管理是两个核心特性,它们极大地简化了Java企业级应用中的事务处理。本实例将深入探讨如何在Spring中使用AOP来实现声明式事务配置。 一、Spring AOP基础 AOP允许...

    spring事务管理

    通过上述示例可以看出,Spring事务管理不仅支持编程式事务管理,还提供了更为简便的声明式事务管理方式。在实际开发中,应根据项目需求选择合适的事务管理方式。对于简单的业务逻辑,建议优先考虑声明式事务管理;而...

    Spring事务管理Demo

    首先,Spring提供了两种主要的事务管理方式:编程式事务管理和声明式事务管理。 1. **编程式事务管理**:通过使用`PlatformTransactionManager`接口及其实现类(如`JdbcTemplate`或`HibernateTemplate`),开发者...

    Spring Boot的事务控制.docx

    Spring提供了两种事务管理方式:编程式事务管理和声明式事务管理。 ##### 1. 编程式事务管理 编程式事务管理是指通过编写代码来控制事务的开始、提交和回滚。这种方式通常在代码中显式地使用`...

    springTransaction.rar

    在这个示例中,我们更可能看到的是声明式事务管理,它是通过在方法上添加注解(如@Transactional)来配置的。这样,当方法执行时,Spring会自动管理事务的开始、提交或回滚。 接下来,我们来看看"bank_account.sql...

    Spring 管理事务(传播特性、隔离级别、readonly).rar

    声明式事务管理则通过@Transactional注解,将事务管理与业务代码分离,更加灵活且易于维护。 5. 示例应用: 假设我们有一个银行转账操作,涉及两个账户的余额修改,这就需要在一个事务中完成,以保证数据一致性。...

    详解Spring学习之编程式事务管理

    Spring框架中提供了两种事务管理方式:编程式事务管理和声明式事务管理。在本篇文章中,我们主要介绍编程式事务管理。 什么是编程式事务管理? 编程式事务管理是指通过编写代码的方式来进行事务管理。这种方式...

    chap05.rar 源代码,配合spring的事务管理那个博文的

    2. **声明式事务管理**:这是Spring最常用且推荐的方式,通过在配置文件(XML或Java配置)中声明事务属性,如@Transactional注解,让Spring自动管理事务的生命周期。这种方式简化了代码,提高了可读性,并且降低了...

    4.Spring中的JdbcTemplate,Spring中的的事务,

    通过本章节的学习,您应该能够掌握如何使用JdbcTemplate进行基本的数据库操作,以及如何在Spring中配置和使用声明式事务来管理复杂的业务流程。这些技能对于开发基于Spring框架的应用程序至关重要。

    JSF+EJB3.0代码

    JSF提供了一种声明式的方式来处理用户事件,更新模型数据,并与后端业务逻辑进行交互。在"dukesbank"项目中,JSF可能被用来创建银行应用的前端界面,如账户管理、交易记录查看等页面。** **EJB 3.0是Java EE...

    java程序员葵花宝典

    - **定义**:Spring框架提供了一套灵活的事务管理机制,支持编程式事务管理和声明式事务管理。 - **作用**:确保数据的一致性和完整性。 - **实现方式**: - 编程式事务管理:通过TransactionTemplate或...

    J2EE中文教材

    JSP是动态网页开发的Java技术,它将HTML代码与Java代码分离,使得开发者可以通过声明式编程方式创建动态内容。JSP页面在服务器端被转换为Servlet,然后执行并返回HTML到客户端。JSP标签库(JSTL)和自定义标签(Tag ...

Global site tag (gtag.js) - Google Analytics