一共有两种事务管理机制:编程式事务管理和声明式事务管理。

1.编程式事务管理企业已经不用了。

2.我们主要讲的是声明式事务管理。声明式事务管理 ,无需要修改原来代码,只需要配置,为目标代码添加事务管理 , AOP底层实现 --- 企业推荐

下面写一个案例:通过Spring声明式事务管理。实现转账案例。

第一步:建表;

建表语句如下:account中有两个账户(aaa和bbb)

CREATE TABLE `account` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`money` double DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `account` VALUES ('1', 'aaa', '1000');
INSERT INTO `account` VALUES ('2', 'bbb', '1000');

创建工程 spring3_day3_transactionmanager

导入IoC核心 4个、 日志2个

测试 1个

AOP 4个

Jdbc 2个

数据库驱动1 个

C3p0 1个

aaarticlea/png;base64,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" alt="" />

引入applicationContext.xml 、 db.properties、 log4j.properties

第二步:写实体类:

//对应数据库中的account表
public class Account {
private int id;
private String name;
private double money;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the money
*/
public double getMoney() {
return money;
}
/**
* @param money the money to set
*/
public void setMoney(double money) {
this.money = money;
} }

第三步:写 AccountDao接口:

public interface AccountDao {

//加钱
public void addmoney(String name,double money);
//减钱
public void reducemoney(String name ,double money);
}

第四步:写AccountDao接口的实现类

//继承了JdbcDaoSupport,这样就可以Spring的JDBc的模板
public class AccountDaoimpl extends JdbcDaoSupport implements AccountDao {
public void addmoney(String name, double money) {
String sql="update account set money=money+"+money+"where name=?";
this.getJdbcTemplate().update(sql, name);
} public void reducemoney(String name, double money) {
String sql="update account set money=money-"+money+"where name=?";
this.getJdbcTemplate().update(sql, name); } }

第五步:写转账的接口

/*
* 转账的接口
*/
public interface AccountService {
//转钱
public void transfer(String outAccount,String inAccount,double money); }

第六步:转账接口的实现类

里面的accountDao用@AutoWired注解的方式。

public class AccountServiceimpl implements AccountService {

  /**
* 这个类是转账接口的实现类。我们要考虑的问题是怎么把Dao给注入进去。
* 这里用注解的方式 @Autowired。
* 一旦用这种方式,之前那种set/get方式在applicationContext.xml中的
* <bean id="AccountService" class="cn.itcast.service.AccountServiceimpl">
<!-- <property name="accountDao" ref="AccountDao"/> -->
</bean>
里面的property name="accountDao" ref="AccountDao"/>必须去掉。
*
*
*/
@Autowired
private AccountDao accountDao; public void transfer(String outAccount, String inAccount, double money) { accountDao.addmoney(inAccount, money);
accountDao.reducemoney(outAccount, money); } }

第七步:写applicationContext.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:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> -->
<!-- 引入peoperties文件 -->
<!-- <context:property-placeholder location="classpath:db.properties"/> -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:db.properties"/>
</bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${driver}"/>
<property name="jdbcUrl" value="${url}"></property>
<property name="user" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean> <bean id="AccountDao" class="cn.itcast.dao.AccountDaoimpl">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="AccountService" class="cn.itcast.service.AccountServiceimpl"> </bean>
</beans>

第八步:写Junit测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class TestAccount {
@Autowired
private AccountService accountService; @Test
public void accounttest()
{ accountService.transfer("aaa", "bbb", 200);
}
}

结果:转账一切正常。但是我们自己在转账函数里面加一个异常:

 *转账接口的实现类
*/
public class AccountServiceimpl implements AccountService { /**
* 这个类是转账接口的实现类。我们要考虑的问题是怎么把Dao给注入进去。
* 这里用注解的方式 @Autowired。
* 一旦用这种方式,之前那种set/get方式在applicationContext.xml中的
* <bean id="AccountService" class="cn.itcast.service.AccountServiceimpl">
<!-- <property name="accountDao" ref="AccountDao"/> -->
</bean>
里面的property name="accountDao" ref="AccountDao"/>必须去掉。
*
*
*/
@Autowired
private AccountDao accountDao; public void transfer(String outAccount, String inAccount, double money) { accountDao.addmoney(inAccount, money);
int a=1/0;
accountDao.reducemoney(outAccount, money); } }

那么会就加钱成功。减钱不成功,所以这里就要加入事务。

25Spring_事务管理的两种机制的更多相关文章

  1. Spring中事务管理的两种方式

    spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务 ...

  2. Spring事务管理的两种方式

    参考文档: http://www.iteye.com/topic/1123347 http://blog.csdn.net/lcj8/article/details/2835432 PS:好像还是tx ...

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

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

  4. Spring管理事物两种方式

    Spring管理事物两种方式 1. 编程式事物管理(在开发中不经常使用) 使用步骤 1. 配置数据库事物管理 DataSourceTransactionManager <!--配置事物管理器-- ...

  5. phpcms调取数据库的两种机制

    在phpcms中,模板调取后台的数据有两种机制: 1.在控制器中定义数据,在模板中直接调用. 2.标签机制.即在模块的classes/tag.class中定义标签类,然后在模板中用标签调用 两种调用机 ...

  6. Spring事务管理的三种方式

    一 .第一种:全注解声明式事务 Xml代码 复制代码 收藏代码 .<?xml version="1.0" encoding="UTF-8"?> .& ...

  7. Spring事务管理的四种方式(以银行转账为例)

    Spring事务管理的四种方式(以银行转账为例) 一.事务的作用 将若干的数据库操作作为一个整体控制,一起成功或一起失败.   原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不 ...

  8. java SWing事件调用的两种机制

      Java(91)  /** * java swing中事件调用的两种机制: * (一)响应机制 * (二)回调机制 */ package test; import java.awt.*; impo ...

  9. Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测

    Kubernetes 健康检查的两种机制:Liveness 探测和 Readiness 探测,并实践了健康检查在 Scale Up 和 Rolling Update 场景中的应用.kubelet使用启 ...

随机推荐

  1. iOS 删除NSString中特定字符

    +(NSString *) stringDeleteString:(NSString *)str { NSMutableString *str1 = [NSMutableString stringWi ...

  2. nodejs socket

    server.js var net = require('net'); var clientList = []; var HOST = '127.0.0.1'; var PORT = 6969; va ...

  3. 小波说雨燕 第三季 构建 swift UI 之 UI组件集-视图集(一)视图共性 学习笔记

    如果想进行自定义的配置,可以继承基类UIView. 地图app中需要多点触动Multiple Touch, opaque不透明的 hidden隐藏的 比如下载的进度条,如果下载完毕,可以通过设置这个属 ...

  4. 怎样查看linux版本

    玩一台新的linux服务器,首先要做的,就是先看下是什么版本的系统: 命令如下: 登录到linux执行cat /etc/redhat-release ,例如如下: [root@3.5.5Biz-46 ...

  5. 给你的Mr.Right画张择偶地图像

    爱一个人就算做不到爱他的全部,至少也应该尊重他的真实,而不是苛求他变成你想要的样子. 娶妻当娶郭芙蓉,经典语录.我是郭芙蓉,我不会武功,我来自江湖,我与众不同.再苦再累,就当自己是二百五,再难再险,就 ...

  6. Effective Java 75 Consider using a custom serialized form

    Principle Do not accept the default serialized form without first considering whether it is appropri ...

  7. MongoDB学习笔记——集合管理

    创建集合 使用db.createCollection(name, options) 方法创建集合 name 所创建的集合名称必选! options 可选.指定有关内存大小及索引的选项 db.creat ...

  8. Mybatis的mapper接口接受的参数类型

    最近项目用到了Mybatis,学一下记下来. Mybatis的Mapper文件中的select.insert.update.delete元素中有一个parameterType属性,用于对应的mappe ...

  9. SQLite数据操作

    1.向学生表中插入100条数据 2.按条件查询学生数据 3.修改学生数据 4.删除学生数据 import UIKit class ViewController: UIViewController { ...

  10. jquery实践案例--验证手机号码

    如果要做手机号的验证,那么我们需要知道手机号码的号段. 182 183 187 188 155 156 176 186 189 //移动运营商:170 移动: 2G号段(GSM):134-139.15 ...