[原创]spring及springmvc精简版--继承数据源,声明式事物
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精简版--继承数据源,声明式事物的更多相关文章
- [原创]spring及springmvc精简版--AOP
接上一篇:[原创]spring及springmvc精简版--IOC 理解AOP.java是一种面向对象的语言.而AOP是面向切面,在我看来是面向逻辑或者业务编程,它是对一组逻辑的抽象和分配. 经典例子 ...
- [原创]spring及springmvc精简版--IOC
本篇博客为自己学习spring和springmvc的一个总结.主要以代码为主,至于文字性描述理解性东西,可以自行百度.有认识不妥的地方,还望指出,相互学习. 以前很困惑spring中的一些概念,在学习 ...
- 全面分析 Spring 的编程式事务管理及声明式事务管理
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- 事务管理(下) 配置spring事务管理的几种方式(声明式事务)
配置spring事务管理的几种方式(声明式事务) 概要: Spring对编程式事务的支持与EJB有很大的区别.不像EJB和Java事务API(Java Transaction API, JTA)耦合在 ...
- 全面分析 Spring 的编程式事务管理及声明式事务管理--转
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...
- spring事务管理——编程式事务、声明式事务
本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 ...
- Spring学习之声明式事物管理
public List<Student> selectStudent() { Student s = new Student(); s.setName("zhengbin&quo ...
- 9.spring:事务管理(下):声明式事务管理
声明式事务管理 sprin的声明式事务是管理AOP技术实现的事务管理,其本质是是对方法前后进行拦截,然后 在目标方法开始之前创建或者加入一个事务,在执行完成目标方法之后根据执行情况提交或者回滚事务. ...
- SSH学习——声明式事物管理(Spring)
1.什么是事物? 事务是一组操作的执行单元,相对于数据库操作来讲,事务管理的是一组SQL指令,比如增加,修改,删除等,事务的一致性,要求,这个事务内的操作必须全部执行成功,如果在此过程种出现了差错,比 ...
随机推荐
- memcached 经常使用命令最全总结大全
1.首先.总结一下memcached的一些基本设置 -p 监听的port -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached ...
- Win10秘笈:两种方式修改网卡物理地址(MAC)
每台能够上网的电脑都有网卡,不管是有线还是无线,网卡本身都得有物理地址,也就是MAC(Media Access Control 或 Medium Access Control)地址.这个地址理论上是固 ...
- shiro配置数据库连接池总结
在项目中要使用shiro做权限认证和登录许可等,现在总结一份,以备以后使用 ms sql版本 [main]ds=com.mchange.v2.c3p0.ComboPooledDataSourceds. ...
- redhat ent 6.5 virtualbox虚拟机通过桥接方式配置主机-虚拟机的局域网
感谢: http://www.linuxidc.com/Linux/2012-06/62544.htm http://www.2cto.com/os/201204/126178.html Virual ...
- Linux 下 -bash: mysql: command not found解决办法
-bash: mysql: command not found 1.vim ~/.bash_profile 最下面写 export PATH=$PATH:/usr/local/mysql/bin(你的 ...
- java前端传入的json字符串保存到表中的方法
表 service_goods_base 字段如下: 传入的json 字符串: servicePictureArray : [{"picServiceUrl": "h ...
- vue之v-bind:style
<div class="collect" @click="collected=!collected"> <i class="fa f ...
- PhotoSwipe异步动态加载图片
在开发搜房家居M站的时候,搜房家居装修效果图相册展示效果需要用到PhotoSwipe插件来显示图片.特点:1. 家居提供的接口,每次只能获取一张图片2. 装修效果图的张数不限.3. 从PhotoSwi ...
- 1714 B君的游戏(Nim博弈)
1714 B君的游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 B君和L君要玩一个游戏.刚开始有n个正整数 ai . 双方轮流操作.每次操作,选一个正整数 ...
- 打日志--以python为例
日志报错要去修,要不然是隐患,总有一天会爆炸 增加日志是排错的好方法,不要不舍得加日志,比如怕代码变难看,怕日志输出太多. python logging exc_info sys.exc_info() ...