Bank 实体类及映射文件
package cn.entity; import java.util.HashSet; import java.util.Set; public class Bank implements java.io.Serializable { private String cardId; private String userName; private Double money; private Set transInfos = new HashSet(0); public Bank() { } public Bank(String userName, Double money) { this.userName = userName; this.money = money; } public Bank(String userName, Double money, Set transInfos) { this.userName = userName; this.money = money; this.transInfos = transInfos; } public String getCardId() { return this.cardId; } public void setCardId(String cardId) { this.cardId = cardId; } public String getUserName() { return this.userName; } public void setUserName(String userName) { this.userName = userName; } public Double getMoney() { return this.money; } public void setMoney(Double money) { this.money = money; } public Set getTransInfos() { return this.transInfos; } public void setTransInfos(Set transInfos) { this.transInfos = transInfos; } }
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="cn.entity.Bank" table="BANK" schema="BANKDB"> <id name="cardId" type="java.lang.String"> <column name="CARD_ID" length="50" /> <generator class="sequence"> <param name="sequence">seq_bank</param> </generator> </id> <property name="userName" type="java.lang.String"> <column name="USER_NAME" length="30" not-null="true" /> </property> <property name="money" type="java.lang.Double"> <column name="MONEY" precision="126" scale="0" not-null="true" /> </property> <set name="transInfos" inverse="true"> <key> <column name="TRANS_CARD_ID" length="50" not-null="true" /> </key> <one-to-many class="cn.entity.TransInfo" /> </set> </class> </hibernate-mapping>
TransInfo 实体类及映射文件
package cn.entity; import java.util.Date; public class TransInfo implements java.io.Serializable { private Long id; private Bank bank; private Double transMoney; private Date transDate; public TransInfo() { } public TransInfo(Bank bank, Double transMoney, Date transDate) { this.bank = bank; this.transMoney = transMoney; this.transDate = transDate; } public Long getId() { return this.id; } public void setId(Long id) { this.id = id; } public Bank getBank() { return this.bank; } public void setBank(Bank bank) { this.bank = bank; } public Double getTransMoney() { return this.transMoney; } public void setTransMoney(Double transMoney) { this.transMoney = transMoney; } public Date getTransDate() { return this.transDate; } public void setTransDate(Date transDate) { this.transDate = transDate; } }
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="cn.entity.TransInfo" table="TRANS_INFO" schema="BANKDB"> <id name="id" type="java.lang.Long"> <column name="ID" precision="10" scale="0" /> <generator class="sequence"> <param name="sequence">seq_trans_info</param> </generator> </id> <many-to-one name="bank" class="cn.entity.Bank" fetch="select"> <column name="TRANS_CARD_ID" length="50" not-null="true" /> </many-to-one> <property name="transMoney" type="java.lang.Double"> <column name="TRANS_MONEY" precision="126" scale="0" not-null="true" /> </property> <property name="transDate" type="java.util.Date"> <column name="TRANS_DATE" length="11" not-null="true" /> </property> </class> </hibernate-mapping>
BankDao 数据访问层接口及实现
package cn.dao; import cn.entity.Bank; /** * 账户 DAO * */ public interface BankDao { /** * 更新账户 * @param bank */ public void update(Bank bank); /** * 通过卡号到一个账户信息 * @param cardId * @return */ public Bank get(String cardId); }
package cn.dao.impl; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import cn.dao.BankDao; import cn.entity.Bank; /** * 账户 DAO */ public class BankDaoImpl extends HibernateDaoSupport implements BankDao { public void update(Bank bank) { super.getHibernateTemplate().update(bank); } public Bank get(String cardId) { return super.getHibernateTemplate().get(Bank.class, cardId); } }
TransInfoDao 数据访问层接口及实现
package cn.dao; import cn.entity.TransInfo; /** * 交易信息 DAO * */ public interface TransInfoDao { /** * 添加一条交易信息 * @param info */ public void save(TransInfo info); }
package cn.dao.impl; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import cn.dao.TransInfoDao; import cn.entity.TransInfo; public class TransInfoDaoImpl extends HibernateDaoSupport implements TransInfoDao { public void save(TransInfo info) { super.getHibernateTemplate().save(info); } }
BankBiz 业务逻辑层接口及实现
package cn.biz; /** * 银行业务类 */ public interface BankBiz { /** * 转帐的业务方法 * @param fromCardId 从哪个卡 * @param toCardId 转到哪个卡 * @param money 钱 */ public void transferAccount(String fromCardId,String toCardId,double money); /** * 存钱业务方法 * @param cardId 卡号 * @param money 钱 */ public void deposit(String cardId,double money); /** * 取钱业务方法 * @param cardId 卡号 * @param money 钱 */ public void withdraw(String cardId,double money); }
package cn.biz.impl; import java.util.Date; import cn.dao.BankDao; import cn.dao.TransInfoDao; import cn.entity.Bank; import cn.entity.TransInfo; import cn.biz.BankBiz; public class BankBizImpl implements BankBiz { private BankDao bankDao;//账户DAO private TransInfoDao transInfoDao;//交易DAO public void setBankDao(BankDao bankDao) { this.bankDao = bankDao; } public void setTransInfoDao(TransInfoDao transInfoDao) { this.transInfoDao = transInfoDao; } /** * 转账 */ public void transferAccount(String fromCardId, String toCardId, double money) { System.out.println("---转账操作---"); //一个账号存入钱 this.deposit(toCardId, money); //另一个账号取钱 this.withdraw(fromCardId, money); } /** * 存钱 */ public void deposit(String cardId, double money) { //通过 ID 得到账户信息 Bank bank =bankDao.get(cardId); bank.setMoney(bank.getMoney()+money); //更新了表 bankDao.update(bank); //往交易表记录流水账 TransInfo t =new TransInfo(); t.setBank(bank); t.setTransDate(new Date()); t.setTransMoney(money); //加入了一条记录 transInfoDao.save(t); System.out.println("卡号:"+cardId+"存入:"+money+"余额是:"+bank.getMoney()); } /** * 取钱 */ public void withdraw(String cardId, double money) { //通过 ID 得到账户信息 Bank bank=bankDao.get(cardId); bank.setMoney(bank.getMoney()-money); //更新了记录 bankDao.update(bank); //添加交易信息 TransInfo t=new TransInfo(); t.setBank(bank); t.setTransDate(new Date()); t.setTransMoney(-money); //添加了记录 transInfoDao.save(t); System.out.println("卡号:"+cardId+"取出:"+money+"余额是:"+bank.getMoney()); } }
applicationContext.xml 配置
<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd"> <!-- 数据源配置 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="oracle.jdbc.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:oracle11" /> <property name="username" value="bankDB" /> <property name="password" value="123456" /> </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.Oracle10gDialect </prop> </props> </property> <property name="mappingResources"> <list> <value>cn/entity/Bank.hbm.xml</value> <value>cn/entity/TransInfo.hbm.xml</value> </list> </property> </bean> <!-- dao --> <bean id="bankDao" class="cn.dao.impl.BankDaoImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="transDao" class="cn.dao.impl.TransInfoDaoImpl"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 业务类同时注入2个 Dao --> <bean id="bankBiz" class="cn.biz.impl.BankBizImpl"> <property name="bankDao" ref="bankDao" /> <property name="transInfoDao" ref="transDao" /> </bean> <!-- 1.配置事物管理 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- 2.事物规则 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- 可以比较加上这句和删除这句转账的区别,默认为 REQUIRED,可省 --> <tx:method name="transferAccount" propagation="REQUIRED" /> <tx:method name="deposit" propagation="REQUIRED" /> <tx:method name="withdraw" propagation="REQUIRED" /> <tx:method name="get*" read-only="true" propagation="SUPPORTS" /> <!-- 查询操作采用只读操作 --> <tx:method name="*" rollback-for="Exception" no-rollback-for="NullPointerException,ClassCastException" /> </tx:attributes> </tx:advice> <!-- 3.把业务规则和类关联起来 --> <aop:config> <aop:pointcut id="bankBizMethods" expression="execution(* cn.biz..*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="bankBizMethods" /> </aop:config> </beans>
Test 测试数据
package cn.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.biz.BankBiz; public class Test { public static void main(String[] args) { ApplicationContext tx =new ClassPathXmlApplicationContext("applicationContext.xml"); BankBiz bankBiz=(BankBiz) tx.getBean("bankBiz"); //存钱 //bankBiz.deposit("11111", 10000); //转账 //bankBiz.transferAccount("22222", "33333", 6000); //取钱 bankBiz.withdraw("11111", 12000); } }
效果图:
相关推荐
在IT行业中,声明式事务处理是一种广泛应用于Java企业级应用中的技术,主要通过Spring框架来实现。相较于编程式事务管理,声明式事务处理更加简洁、易于维护,它将事务管理与业务逻辑解耦,使开发者可以专注于业务...
在SSH整合中,Spring的声明式事务管理是一个关键部分,它允许开发者无需在业务代码中显式控制事务的开始、提交和回滚,而是通过配置来决定哪些方法应该在事务中执行。 首先,让我们来看看SSH整合的步骤: 1. **...
在SSH框架中,Spring是主要负责事务管理的组件,它提供了编程式和声明式两种事务管理方式。 **声明式事务管理**是Spring提供的强大特性,它允许开发者通过配置XML或注解来定义事务边界,无需在代码中显式处理。在...
此外,Spring3还提供了事务管理服务,可以配合Hibernate进行声明式事务控制,确保业务操作的原子性和一致性。 4. **MyEclipse**:MyEclipse是集成开发环境(IDE)的一种,它为Java开发者提供了丰富的功能,包括代码...
总结来说,这个“带事务的ssh框架源代码”着重展示了SSH框架如何在不同版本的Spring中处理事务,特别是Spring的声明式事务管理特性。通过深入学习这部分源代码,开发者可以更好地理解如何在实际项目中实现高效、安全...
在银行系统中,Spring可以管理数据库连接池、事务管理、服务层接口及其实现等,确保了系统的稳定性和可测试性。 再者,Hibernate是Java持久化框架,它简化了数据库操作,提供了对象-关系映射(Object-Relational ...
1.本例子的使用了 ssh 框架 2.本例子DAO层 使用了 getHibernateTemplate 来实现数据的新增修改和删除 3.本例子使用了声明式...4.本例子提供了详细的使用方法,可以根据 readme.txt 来逐步的验证声明式事务是否起作用
在开发过程中,SSH框架的集成可以有效地提高开发效率,通过模块化的设计降低复杂性,同时,Spring的事务管理能够确保银行系统的数据一致性。项目中的"ESHop"可能是电子商务相关的子模块,可能是模拟了部分银行业务与...
在这个“SSH框架银行系统”中,它利用这三个组件来实现一个完整的银行系统,包括存款、取款、转账等核心功能。下面将详细介绍SSH框架及其在银行系统中的应用。 **Struts2** 是MVC(Model-View-Controller)设计模式...
在银行系统中,Spring管理着所有对象的生命周期和依赖关系,比如数据库连接池、事务管理器等。它还通过Spring MVC模块支持Web应用程序的开发,与Struts协同工作,提供更灵活的控制层实现。 3. **Hibernate**: ...
【标题】"bank.zip_bank ssh_java_ssh_ssh银行_银行管理系统" 指的是一款基于SSH框架开发的银行账目管理系统,该系统集成了多种功能,适用于处理银行日常业务操作。SSH是一个流行的企业级Web应用程序开发框架,由...
在SSH中,事务的管理通常基于Spring的声明式事务,通过在方法上添加@Transactional注解来指定事务的属性,如传播行为、隔离级别和超时设置。这样,当一个方法被调用时,Spring会自动开始一个事务,如果方法执行过程...
通过研究这个SSH框架银行系统的源码,开发者可以深入理解如何在实际项目中整合和使用这三个框架,掌握MVC架构的设计思想,以及数据库操作、事务管理等核心概念。同时,也能了解在银行系统这样的业务场景下,如何构建...
在IT行业中,SSH(Spring、Struts、Hibernate)是一个经典的Java Web开发框架组合,而这里的“SSH笔记-事务管理”主要关注的是Spring框架中的事务管理部分。Spring以其强大的依赖注入和面向切面编程能力,提供了灵活...
SSH事务整合是Java后台开发中常见的一种技术组合,它涵盖了Spring、SpringMVC和Hibernate三个核心框架。这个项目展示了如何将这些组件有效地集成在一起,以实现一个完整的后端解决方案。 首先,Spring作为基础架构...
网上银行系统SSH是一个基于Spring、Struts2和Hibernate(SSH)三大开源框架的集成应用,旨在提供一个简单、易理解的网上银行系统实现。SSH框架是Java Web开发中常用的技术栈,Spring负责业务层管理,Struts2处理表现...
Spring的声明式事务管理可以确保转账操作的原子性,即要么全部完成,要么全部回滚。如果转账过程中出现任何错误,整个操作会被回滚,确保账目的准确性。 5. **Java编程**:整个项目的基础是Java语言,它提供了丰富...
Spring的声明式事务管理通过在配置文件中定义事务规则,可以轻松地实现事务的开始、提交、回滚,确保数据的一致性。 Hibernate作为持久层框架,用于简化数据库操作。它提供了一种对象-关系映射(ORM)机制,使得...