java spring 事务处理_JavaWeb学习:Spring的事务管理

一、Spring的事务管理的API

①、PlatformTransactionManager:平台事务管理器

平台事务管理器:接口,是Spring用于管理事务的真正的对象。

DataSourceTransactionManager            :底层使用JDBC管理事务

HibernateTransactionManager                 :底层使用Hibernate管理事务

②、TransactionDefinition         :事务定义信息

事务定义:用于定义事务的相关的信息,隔离级别、超时信息、传播行为、是否只读

③、TransactionStatus:事务的状态

事务状态:用于记录在事务管理过程中,事务的状态的对象。

二、事务管理的API的关系

Spring进行事务管理的时候,首先平台事务管理器根据事务定义信息进行事务的管理,在事务管理过程中,产生各种状态,将这些状态的信息记录到事务状态的对象中。

三、Spring的事务的传播行为

Spring中提供了七中事务的传播行为

public void方法A(){

xxDao.save();

yyDao.update();

}public void方法b(){

方法A();

zzDao.del();

ttDao.update();

}

保证多个操作在同一个事务中

PROPAGATION_REQUIRED:默认值,如果方法A中有事务,使用方法A中的事务,如果没有事务,创建一个新事务。

PROPAGATION_SUPPORTS:支持事务,如果方法A中有事务,使用方法A中的事务。如果没有,不使用事务

PROPAGATION_MANDATORY:如果方法A中有事务,使用方法A中的事务,如果没有,抛出异常

保证多个操作不在同一个事务中

PROPAGATION_REQUIRES_NEW:如果方法A中有事务,将事务挂起,创建新事务,只包含自身操作。如果方法A中没有事务,创建新事务,包含自身操作。

PROPAGATION_NOT_SUPPORTED:如果方法A中有事务,将事务挂起。不使用事务管理

PROPAGATION_NEVER:如果方法A中有事务,抛出异常

嵌套式事务

PROPAGATION_NESTED:如果方法A中有事务,按照A的事务执行,执行完成后,设置一个保存点,执行方法B中的操作,如果没有异常,执行通过,如果有异常,选择回滚到最初位置或回滚到保存点。

四、Spring的事务管理

①、搭建Spring的事务管理的环境

Ⅰ、创建Service的接口和实现类

public class AccountServiceImpl implementsAccountService {privateAccountDao accountDao;public voidsetAccountDao(AccountDao accountDao) {this.accountDao =accountDao;

}

@Overridepublic voidtransfer(String from, String to, BigDecimal money) {

accountDao.outMoney(from, money);

accountDao.inMoney(to, money);

}

}

Ⅱ、创建DAO的接口和实现类

public class AccountDaoImpl extends JdbcDaoSupport implementsAccountDao {

@Overridepublic voidoutMoney(String from, BigDecimal money) {this.getJdbcTemplate().update("update account set money=money - ? where name = ?", money, from);

}

@Overridepublic voidinMoney(String to, BigDecimal money) {this.getJdbcTemplate().update("update account set money=money + ? where name = ?", money, to);

}

}

Ⅲ、配置Service和DAO交给Spring管理

Ⅳ、配置连接池

Ⅴ、在DAO注入Jdbc的模板(注入的是dataSource的原因extends JdbcDaoSupport ,查看JdbcDaoSupport 的代码有setDataSource方法)

Ⅵ、编写测试方法

@SpringJUnitConfig(locations = "classpath:tx.xml")public classSpringTxDemo {

@AutowiredprivateAccountService accountService;

@Testpublic voiddemo1() {

accountService.transfer("zhangsan", "lisi", new BigDecimal(1000.00));

}

}

五、Spring的事务管理

①、一类:编程式事务(需要手动编写代码)

Ⅰ、配置平台事务管理器

Ⅱ、Spring提供了事务管理的模板类

Ⅲ、业务层(Service)需要使用事务,将书屋管理模板类注入到业务层

②、二类:声明式事务管理(通过配置实现)---底层原理:AOP(面向切面)

在方法上通过增强的方式添加事务处理,此事务增强是环绕通知和异常抛出通知,不需要手动编写了,只需要配置就可以了

Ⅰ、XML方式的声明式事务管理

1、引入aop的开发包

2、配置事务管理器

3、配置增强

在使用需要添加约束

http://www.springframework.org/schema/beans

https://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context

https://www.springframework.org/schema/context/spring-context.xsd

http://www.springframework.org/schema/aop

https://www.springframework.org/schema/aop/spring-aop.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx.xsd">

4、AOP的配置

Ⅱ、注解方式的声明式事务管理

1、引入aop的开发包

2、配置事务管理器

3、开启注解事务

4、在业务层添加注解

@Transactionalpublic class AccountServiceImpl implementsAccountService {privateAccountDao accountDao;public voidsetAccountDao(AccountDao accountDao) {this.accountDao =accountDao;

}

@Overridepublic voidtransfer(String from, String to, BigDecimal money) {

accountDao.outMoney(from, money);int d = 1 / 0;

accountDao.inMoney(to, money);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值