Spring事务之详解--三种实现方式
实现购买股票案例:
一、引入JAR文件:
二、开始搭建分层架构---创建账户(Account)和股票(Stock)实体类
Account:
/*
* 账户
*/
public class Account { private int aid;//账户编号
private String aname;//账户名称
private double balance;//账户金额 public int getAid() {
return aid;
}
public void setAid(int aid) {
this.aid = aid;
}
public String getAname() {
return aname;
}
public void setAname(String aname) {
this.aname = aname;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
Stock:
/*
* 股票
*/
public class Stock { private int sid;//股票编号
private String sname;//名称
private int count;//股数 public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
三、创建Dao层,定义账户以及股票的接口,自定义新增和修改的方法,实现类实现该接口,重写方法
IAccountDao:
public interface IAccountDao {
//添加账户
public int addAccount(Account account); //修改账户
public int updateAccount(int aid,int money,boolean isBuyOrNot);
//查询余额
public int selectMoney(int aid);
}
IStockDao:
public interface IStockDao {
//添加股票
public int addStock(Stock stock); //修改股票
public int updateStock(int aid,int num,boolean isBuyOrNot);
}
AccountDaoImpl:实现类。继承自JdbcDaoSupport并实现IAccountDao接口,在这里需要用到JDBC模板的getJdbcTemplate(),通过该方法实现对SQL语句增删改查。
public class AccountDaoImpl extends JdbcDaoSupport implements IAccountDao{ //添加
public int addAccount(Account account) {
String sql="insert into account(aid,aname,balance) values(?,?,?)";
int count=this.getJdbcTemplate().update(sql, account.getAid(),account.getAname(),account.getBalance());
return count;
} //修改
public int updateAccount(int aid, int money, boolean isBuyOrNot) {
String sql=null;
if(isBuyOrNot){
sql="update account set balance=balance-? where aid=?";
}
else{
sql="update account set balance=balance+? where aid=?";
}
int count=this.getJdbcTemplate().update(sql, money,aid);
return count;
}
StockDaoImpl:实现类同理
public class StockDaoImpl extends JdbcDaoSupport implements IStockDao{ //添加股票
public int addStock(Stock stock) {
String sql="insert into stock(sid,sname,count) values(?,?,?)";
int count=this.getJdbcTemplate().update(sql, stock.getSid(),stock.getSname(),stock.getCount());
return count;
} //修改
public int updateStock(int aid, int num, boolean isBuyOrNot) {
String sql=null;
if(isBuyOrNot){
sql="update stock set count=count+? where sid=?";
}
else{
sql="update stock set count=count-? where sid=?";
}
int count=this.getJdbcTemplate().update(sql, num,aid);
return count; }
四、业务逻辑层:service
定义接口IStockService,并实现添加账户,股票,以及购买股票的方法.购买股票需要传入账户的id,股票的id。以及金额,股数
public interface IStockService {
//添加账户
public int addAccount(Account account);
//添加股票
public int addStock(Stock stock); //购买股票
public void buyStock(int aid,int money,int sid,int num) throws StockException;
}
实现类:StockServiceImpl。重写方法。并植入Dao。以及自定义StockException异常,用于判定用户的余额小于0,抛出异常
public class StockServiceImpl implements IStockService{
//植入dao
private IAccountDao accountDao;
private IStockDao stockDao;
//添加账户
public int addAccount(Account account) { return accountDao.addAccount(account);
}
//添加股票
public int addStock(Stock stock) {
return stockDao.addStock(stock);
} //购买一股票
public void buyStock(int aid, int money, int sid, int num) throws StockException { boolean isBuy=true;
accountDao.updateAccount(aid, money, isBuy);
if(accountDao.selectMoney(aid)<=0){
throw new StockException("捕获异常!!!");
} stockDao.updateStock(aid, num, isBuy); }
五、Spring配置文件。[重点]
方式一:通过事务代理工厂bean进行配置[XML方式]
①引入一系列的约束头文件以及标签
②配置C3P0数据源以及DAO、Service
③配置事务管理器以及事务代理工厂Bean。测试类getBean获取的是代理工厂id
方式二:注解。测试类getBean获取的id是原始对象service
<!-- 注解 -->
<tx:annotation-driven transaction-manager="mytx"/>
方式三:Aspectj AOP配置事务 。同理 测试类getBean方法id获取的是原始对象
测试类:
public class Test01 {
@Test
public void addTest() throws StockException{
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); IStockService service = (IStockService)ctx.getBean("stockService"); service.buyStock(1, 800, 1, 2);
}
Spring事务之详解--三种实现方式的更多相关文章
- Spring事务Transaction配置的五种注入方式详解
Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...
- spring事务管理(详解和实例)
原文地址: 参考地址:https://blog.csdn.net/yuanlaishini2010/article/details/45792069 写这篇博客之前我首先读了<Spring in ...
- 可能是最漂亮的Spring事务管理详解
Java面试通关手册(Java学习指南):https://github.com/Snailclimb/Java_Guide 微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么 ...
- 可能是最漂亮的Spring事务管理详解 专题
微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允 ...
- 最漂亮的Spring事务管理详解
SnailClimb 2018年05月21日阅读 7245 可能是最漂亮的Spring事务管理详解 Java面试通关手册(Java学习指南):github.com/Snailclimb/- 微信阅读地 ...
- (转)Spring事务管理详解
背景:之前一直在学习数据库中的相关事务,而忽略了spring中的事务配置,在阿里面试时候基本是惨败,这里做一个总结. 可能是最漂亮的Spring事务管理详解 https://github.com/Sn ...
- spring事务配置详解
一.前言 好几天没有在对spring进行学习了,由于这几天在赶项目,没有什么时间闲下来继续学习,导致spring核心架构详解没有继续下去,在接下来的时间里面,会继续对spring的核心架构在继续进行学 ...
- Spring学习日记01_IOC_xml的三种注入方式
什么是IOC 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 使用IOC目的:为了耦合度降低 做入门案例就是IOC实现 IOC底层原理 xml解析 工厂模式 反射 原始方式 cla ...
- Spring 事务机制详解
原文出处: 陶邦仁 Spring事务机制主要包括声明式事务和编程式事务,此处侧重讲解声明式事务,编程式事务在实际开发中得不到广泛使用,仅供学习参考. Spring声明式事务让我们从复杂的事务处理中得到 ...
随机推荐
- scikit-learn随机森林调参小结
在Bagging与随机森林算法原理小结中,我们对随机森林(Random Forest, 以下简称RF)的原理做了总结.本文就从实践的角度对RF做一个总结.重点讲述scikit-learn中RF的调参注 ...
- 设计模式(六):控制台中的“命令模式”(Command Pattern)
今天的博客中就来系统的整理一下“命令模式”.说到命令模式,我就想起了控制台(Console)中的命令.无论是Windows操作系统(cmd.exe)还是Linux操作系统(命令行式shell(Comm ...
- sql无限递归查询
--------------所有子集数据包括自己--------------------- CREATE PROCEDURE ALLSON @ID INT AS BEGIN WITH CTE AS ( ...
- 制作自己的MVC框架(一)——简单粗暴的实现
现在市面上有很多成熟的MVC框架,可以拿来直接用,但自己造一下轮子其实也挺有意思的. 下面先来看个最简单粗暴的MVC实现. 5个文件就能实现最简单的MVC,在Apache中设置一个虚拟目录,配置个简单 ...
- 读书笔记--SQL必知必会06--用通配符进行过滤
6.1 LIKE操作符 通配符(wildcard),用来匹配某些值的的特殊字符. 在搜索子句中必须通过LIKE操作符使用通配符. 通配符搜索只能用于文本字段(字符串),非文本数据类型字段不能使用通配符 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- C#开发微信门户及应用(36)--微信卡劵管理的封装操作
前面几篇介绍了微信支付方面的内容,本篇继续微信接口的一些其他方面的内容:卡劵管理.卡劵管理是微信接口里面非常复杂的一个部分,里面的接口非常多,我花了不少时间对它进行了封装处理,重构优化等等工作,卡劵在 ...
- php实现设计模式之 策略模式
策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.是一种行为模式. 策略模式包含三种角色 1 抽象策略角色: 策略类,通常由一个接口或 ...
- 工作中常用的js、jquery自定义扩展函数代码片段
仅记录一些我工作中常用的自定义js函数. 1.获取URL请求参数 //根据URL获取Id function GetQueryString(name) { var reg = new RegExp(&q ...
- js picker webapp仿ios picker
iosselect 在webapp下的一个picker组件 可以轻松实现各类选择器效果.比如地区选择 时间选择 日期选择等. 可以定制依赖关系,可以定制选择层级,可以定制高度 展示项数.无论你是px还 ...