[原创]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指令,比如增加,修改,删除等,事务的一致性,要求,这个事务内的操作必须全部执行成功,如果在此过程种出现了差错,比 ...
随机推荐
- Ocelot + IdentityServer4 坑自己
现像是 connect/userinfo 可以访问 但是api都提示401 后面发现是在appsettings.json "Options": {"Authority&q ...
- UVA - 11584 划分字符串的回文串子串; 简单dp
/** 链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=34398 UVA - 11584 划分字符串的回文串子串: 简单 ...
- Java中String的split()方法的一些疑问和试验
http://tjuking.iteye.com/blog/1507855 和我想的还是不大一样,因为不知道源码也不知道具体是怎么实现的,我的理解如下: 当字符串只包含分隔符时,返回数组没有元素:当字 ...
- View拖拽 自定义绑定view拖拽的工具类
由于工作需求,需要用到这种处理方法所以我就写了这个 废话不多说先看效果图 接下来就看代码吧 DragDropManager import android.app.Activity; import an ...
- 图像增强之DDE---基于红外图像的数字图像细节增强DDE
(1)DDE应用背景 (2)DDE算法简介 (3)DDE 实现 (4)DDE 总结和不足 ----------author:pkf -----------------time:2-9 -------- ...
- point-position2修改版
说明: 在共面直线测试中,由于计算误差等原因,共面条件判断不准,但计算结果依然正确. // point-position2.cpp : 定义控制台应用程序的入口点. #include "st ...
- linux各种路径小结
man路径 /etc/manpath.config $MANPATH include路径 $C_INCLUDE_PATH $CPLUS_INCLUDE_PATH 动态链接库的路径 $LD_LIBRAR ...
- hdu 1534(差分约束+spfa求最长路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...
- 一套一般般的前端框架 layui
http://www.layui.com/doc/
- 在看lua仿单继承
--lua仿单继承 Account = { balance = } --对于成员变量,第一此访问要使用元表中的,在第一次也赋值到自己的域中了 --将不涉及到__index了 function Acco ...