1.前期:导入c3p0 jar包,相关数据库连接jar包,我用的是mysql

2.关注事物管理器的配置和AOP配置

代码: 核心关注bean配置文件

application.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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
<!-- 加载属性文件 -->
<context:property-placeholder location="classpath:db.properties"/> <!-- 初始化数据源的bean -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driverClassName1}"></property>
<property name="jdbcUrl" value="${url1}"></property>
<property name="user" value="${username1}"></property>
<property name="password" value="${password1}"></property>
<property name="maxPoolSize" value="${maxActive1}"></property>
<property name="initialPoolSize" value="${initialSize1}"></property>
</bean>
<!-- 配置jdbcTemplate -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property> </bean> <bean id="person" class="com.bean.Person"></bean> <bean id="dao" class="com.dao.Dao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="service" class="com.service.Service">
<property name="dao" ref="dao"></property>
</bean> <!-- 购买商品的bean -->
<bean id="users" class="com.bean.Users"></bean>
<bean id="goods" class="com.bean.Goods"></bean>
<bean id="usersDao" class="com.dao.UsersDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="goodsDao" class="com.dao.GoodsDao">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="buyService" class="com.service.BuyService">
<property name="goodsDao" ref="goodsDao"></property>
<property name="usersDao" ref="usersDao"></property>
</bean>
<bean id="buyMarthService" class="com.service.BuyMarthService">
<property name="buyService" ref="buyService"></property>
</bean> <!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 配置事务属性 -->
<tx:advice id="txa" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="buyOneGoods" propagation="REQUIRES_NEW"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 配置事务aop --> <aop:config>
<aop:pointcut expression="execution(* com.service.*.*(..))" id="pc"/>
<aop:advisor advice-ref="txa" pointcut-ref="pc"/>
</aop:config>
</beans>

db.properties

 driverClassName1 = com.mysql.jdbc.Driver
url1 = jdbc:mysql://localhost:3306/test
username1 = root
password1 = mysql
maxActive1 = 50
initialSize1 =20

com.bean

Users

 package com.bean;

 public class Goods {

     private int gid;
private int gprice;
private int gnum;
public int getGid() {
return gid;
}
public void setGid(int gid) {
this.gid = gid;
}
public int getGprice() {
return gprice;
}
public void setGprice(int gprice) {
this.gprice = gprice;
}
public int getGnum() {
return gnum;
}
public void setGnum(int gnum) {
this.gnum = gnum;
} }

Person

 package com.bean;

 public class Person {

     private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
} }

User

 package com.bean;

 public class Users {

     private int uid    ;
private String uname;
private int umoney;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getUmoney() {
return umoney;
}
public void setUmoney(int umoney) {
this.umoney = umoney;
} }

DAO

DAO

 package com.dao;
import org.springframework.jdbc.core.JdbcTemplate; import com.bean.Person; public class Dao { private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} public int update(Person p){
int num = jdbcTemplate.update("update person set name=? where age=?", p.getName(),p.getAge());
return num;
}
}

GoodsDao

 package com.dao;

 import org.springframework.jdbc.core.JdbcTemplate;

 public class GoodsDao {

     private JdbcTemplate jdbcTemplate;

     public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} public int getGpriceByGid(int gid){
int gprice = jdbcTemplate.queryForObject("select gprice from goods where gid=?", Integer.class, gid);
return gprice;
} public int getGnumByGid(int gid){
int gnum = jdbcTemplate.queryForObject("select gnum from goods where gid=?", Integer.class, gid);
return gnum;
} public void updateGnum(int gid,int num){
jdbcTemplate.update("update goods set gnum=gnum-? where gid=?", num,gid);
}
}

UserDao

package com.dao;

import org.springframework.jdbc.core.JdbcTemplate;

public class UsersDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} public int getMoneyByUid(int uid){
int umoney = jdbcTemplate.queryForObject("select umoney from users where uid=?", Integer.class, uid);
return umoney;
}
public void updateUmoney(int uid,int price){
jdbcTemplate.update("update users set umoney=umoney-? where uid=?", price,uid);
}
}

Service

 package com.service;

 public class BuyMarthService {

     private BuyService buyService;
public void setBuyService(BuyService buyService) {
this.buyService = buyService;
} public void buygoodsList(int uid,int[] gids,int[] nums){
for(int i = 0;i<gids.length;i++){
buyService.buyOneGoods(uid, gids[i], nums[i]);
} }
}
 package com.service;

 import com.dao.GoodsDao;
import com.dao.UsersDao; public class BuyService { private UsersDao usersDao;
private GoodsDao goodsDao;
public void setGoodsDao(GoodsDao goodsDao) {
this.goodsDao = goodsDao;
}
public void setUsersDao(UsersDao usersDao) {
this.usersDao = usersDao;
} public void buyOneGoods(int uid,int gid,int num){
/*
* 1-获取商品的库存
* 2-验证库存是否足够
* 1-不足:抛出异常 (回滚)
* 2-足:修改商品的库存
* 3-修改余额等同2
*/
int gnum = goodsDao.getGnumByGid(gid);
if(gnum <= num){
throw new RuntimeException("商品库存不足");
}
goodsDao.updateGnum(gid, num);
int gprice = goodsDao.getGpriceByGid(gid);
int umoney = usersDao.getMoneyByUid(uid);
if(umoney < gprice*num){
throw new RuntimeException("用户余额不足");
}
usersDao.updateUmoney(uid, gprice*num);
} }
 package com.service;

 import com.bean.Person;
import com.dao.Dao; public class Service { private Dao dao;
public void setDao(Dao dao) {
this.dao = dao;
}
public void updatePerson(Person p){
dao.update(p);
}
}

[原创]spring及springmvc精简版--继承数据源,声明式事物的更多相关文章

  1. [原创]spring及springmvc精简版--AOP

    接上一篇:[原创]spring及springmvc精简版--IOC 理解AOP.java是一种面向对象的语言.而AOP是面向切面,在我看来是面向逻辑或者业务编程,它是对一组逻辑的抽象和分配. 经典例子 ...

  2. [原创]spring及springmvc精简版--IOC

    本篇博客为自己学习spring和springmvc的一个总结.主要以代码为主,至于文字性描述理解性东西,可以自行百度.有认识不妥的地方,还望指出,相互学习. 以前很困惑spring中的一些概念,在学习 ...

  3. 全面分析 Spring 的编程式事务管理及声明式事务管理

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  4. 事务管理(下) 配置spring事务管理的几种方式(声明式事务)

    配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...

  5. 全面分析 Spring 的编程式事务管理及声明式事务管理--转

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  6. spring事务管理——编程式事务、声明式事务

    本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 ...

  7. Spring学习之声明式事物管理

    public List<Student> selectStudent() { Student s = new Student(); s.setName("zhengbin&quo ...

  8. 9.spring:事务管理(下):声明式事务管理

    声明式事务管理 sprin的声明式事务是管理AOP技术实现的事务管理,其本质是是对方法前后进行拦截,然后 在目标方法开始之前创建或者加入一个事务,在执行完成目标方法之后根据执行情况提交或者回滚事务. ...

  9. SSH学习——声明式事物管理(Spring)

    1.什么是事物? 事务是一组操作的执行单元,相对于数据库操作来讲,事务管理的是一组SQL指令,比如增加,修改,删除等,事务的一致性,要求,这个事务内的操作必须全部执行成功,如果在此过程种出现了差错,比 ...

随机推荐

  1. 【转】Silverlight全开源工作流设计器

    声明 此工作流是作者自行构思和设计的被动式数据触发模式的工作流.没有遵循各种现有的工作流设计标准(如WFMC或WSFL),也没有与其他工作流通用性的接口规范.这里体现更多的是作者对工作流的使用思想,及 ...

  2. 访问 JavaBean 对象的属性

    在 <jsp:useBean> 标签主体中使用 <jsp:getProperty/> 标签来调用 getter 方法,使用 <jsp:setProperty/> 标 ...

  3. C++11写算法之冒泡排序

    冒泡排序很形象,指从数组后面将更小的值慢慢浮到前面去,每遍历一趟使得最小值浮到最前面(指当前位置). 这里有点小技巧,当某一次遍历过程中发现无交换,则说明此时数组已经排序完成,可提前退出. 时间复杂度 ...

  4. java中InputStream转化为byte[]数组

    //org.apache.commons.io.IOUtils.toByteArray已经有实现 String filePath = "D:\\aaa.txt"; in = new ...

  5. docker学习笔记(2) 构建镜像

    一.手动构建一个简单镜像 我们以构建nginx的docker镜像为例:手动构建镜像 docker pull centos    安装基础镜像docker run --name mynginx -it ...

  6. A Simple Problem with Integers(线段树)

    F - A Simple Problem with Integers Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:% ...

  7. 巨蟒django之权限9:前端展示修改删除合并&&权限展示

    1.权限组件控制流程(硬核重点) 2.权限组件控制流程 3.角色管理 4.删除合并 5.权限展示

  8. xenserver 模板导出导入

    由于业务需求,新增一台xenserver,需要将原先创建好的模板环境导入到新的母机上面,此处记录一下 1.导出模板 # 获取需要导出的模板uuid [root@localhost ~]# xe tem ...

  9. JavaScript数据结构与算法-栈练习

    栈的实现 // 栈类 function Stack () { this.dataStore = []; this.top = 0; // 栈顶位置 相当于length,不是索引. this.push ...

  10. resetForm(name1,name2)-我的JavaScript函数库-mazey.js

    重置表单输入值为原始(空)状态. 参数:name1,name2,name3...NAME属性,可以多个. function resetForm(){ for(var i = 0; i < arg ...