用Spring 中的事务写的银行转帐的例子:(环境同上一个贴子)

一、表结构: (create table (id int,username varchar(10),salary int);)

二、文件列表:

OrdersDao.java  OrdersService Test.java 和beans2.xml

(要点):1、要在需要处理事务的类前面加上 @Transactional ,表示引入事务注解

2、在配置 文件 中,配置c3p0连接池,配置dataSource ,通过配置文件创建事务管理器对象,开启事务注解

     <!-- 1 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="DriverClass" value ="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/user"></property>
<property name="user" value="root"></property>
<property name="password" value=""></property>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 、开启配置事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

全部代码如下:

OrdersDao.java

 package spring.dao;

 import org.springframework.jdbc.core.JdbcTemplate;

 public class OrdersDao {
private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
} public void lessMoney() {
String sql = "update salary set salary=salary - ? where username=?";
jdbcTemplate.update(sql,1000,"zhangs");
}
public void moreMoney() {
String sql = "update salary set salary=salary + ? where username=?";
jdbcTemplate.update(sql,1000,"wangs");
} }
/*
*对数据库操作的方法,不写业务操作;
*/

OrdersService.java

 package spring.service;

 import org.springframework.transaction.annotation.Transactional;

 import spring.dao.OrdersDao;

 @Transactional
public class OrdersService {
private OrdersDao ordersDao; public void setOrdersDao(OrdersDao ordersDao) {
this.ordersDao = ordersDao;
}
public void acount() {
//调用DAO的方法
//业务逻辑层,写转帐业务
//zhangs 少1000 //wangs多1000
ordersDao.moreMoney();
int s = 10/0;
ordersDao.lessMoney();
}
}
TestApi.java
 package spring.service;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TettApi {
@Test
public void testDemo() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans2.xml");
OrdersService ordersService = (OrdersService) context.getBean("ordersService");
ordersService.acount();
} }
 <?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
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/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 1配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="DriverClass" value ="com.mysql.jdbc.Driver"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/user"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!-- 2 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 注入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 3、开启配置事务注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/> <bean id="ordersDao" class="spring.dao.OrdersDao" >
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean> <bean id="ordersService" class="spring.service.OrdersService">
<property name="ordersDao" ref="ordersDao"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
</beans>

最后一个是beans2.xml配置文件。

事务一般是成批处理数据库时用到,成组成批执行命令,要不全执行,要么全部不执行。防止有意外事件,造成上面的数减了,下面的数没有加上;(银行转帐例子);

最新文章

  1. 30个你必须记住的CSS选择符
  2. 那些年一起用过的iOS开发利器[4月2号更新]
  3. Java 动态代理作用是什么?
  4. Foundation 5 发布!最先进的响应式前端框架
  5. java计算时间差
  6. Linux Vsftpd 连接超时解决方法
  7. @proprety数组字典字符串用copy和strong区别(深浅拷贝)
  8. MyEclipse中新建html5中文乱码
  9. JNI 学习笔记
  10. H5API——Canvas
  11. SQL Server数据库连接类SQLHelper.cs
  12. IE9透明filter和opacity同时生效的解决办法 IE9 hack only
  13. winform —— 常用控件
  14. MyEclipse中“擅自乱改”项目名导致项目报错的处理
  15. Spring.net 学习
  16. c# 几种深拷贝方式的比较
  17. 一篇文章了解云安全领域的新宠CCSK
  18. 关于mysql中存储json数据的读取问题
  19. Actifio如何保护和管理Oracle-带外篇
  20. SmartGit/HG

热门文章

  1. linux中查找文件属于那个软件包的方法
  2. python 未发现数据源名称并且未指定默认驱动程序
  3. 数据挖掘算法之关联规则挖掘(二)FPGrowth算法
  4. WIN7怎样把屏幕改为16位色
  5. iOS学习笔记之蓝牙(有关蓝牙设备mac地址处理) 2
  6. Django——QuerySets酷毙了!
  7. 【Java】Java_11运算符
  8. 51单片机 | 1-Wire总线及应用实例
  9. UE4 场景展示Demo
  10. IFrame和Ajax比較