spring 事务使用

  • 1. 业务代码
  • 2. xml配置
  • 3. 注解配置

1. 业务代码

  • 数据表结构
  • dao
package com.lovely.dao.impl;import com.lovely.dao.AccountDao;
import org.springframework.jdbc.core.JdbcTemplate;/*** @author echo lovely* @date 2020/8/9 11:01*/
public class AccountDaoImpl implements AccountDao {private JdbcTemplate jdbcTemplate;// 提供set方法 用于依赖注入public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}// 出账public void out(String outMan, Double money) {String sql = "update account set money = money - ? where name = ?";jdbcTemplate.update(sql, new Object[]{money, outMan});}// 进账public void in(String inMan, Double money) {String sql = "update account set money = money + ? where name = ?";jdbcTemplate.update(sql, new Object[]{money, inMan});}
}
  • service
package com.lovely.service.impl;import com.lovely.dao.AccountDao;
import com.lovely.service.AccountService;/*** @author echo lovely* @date 2020/8/9 11:08*/
public class AccountServiceImpl implements AccountService {private AccountDao accountDao;public void setAccountDao(AccountDao accountDao) {this.accountDao = accountDao;}/*** 转账业务具体实现 需要使用事务* @param outMan 转出人* @param inMan  收账人* @param money  money*/public void transfer(String outMan, String inMan, Double money) {accountDao.in(inMan, money);System.out.println(1/0);accountDao.out(outMan, money);}
}
  • controller
package com.lovely.controller;import com.lovely.service.AccountService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;/*** @author echo lovely* @date 2020/8/9 11:12*/
public class AccountController {public static void main(String[] args) {ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");AccountService accountService = app.getBean(AccountService.class);// 转账测试accountService.transfer("jack", "rose", 1000.0);}
}
  • 上面的bean的创建方式set注入,没搞注解

2. xml配置

  • 核心 事务管理器 对转账方法动态进行事务控制
    <!-- 数据源事务管理器 --><bean id="tranManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 事务通知 增强方法 --><tx:advice id="txAdvice" transaction-manager="tranManager"><!--事务属性信息的配置--><tx:attributes><tx:method name="*"/><!--<tx:method name="transfer*" isolation="DEFAULT" read-only="false"/>--></tx:attributes></tx:advice><!-- 配置事务的织入 --><aop:config><!--<aop:pointcut id="myPointcut" expression="execution(* com.lovely.service.impl.*.*(..))"/><aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>--><aop:advisor advice-ref="txAdvice" pointcut="execution(* com.lovely.service.impl.*.*(..))"/></aop:config>

3. 注解配置

  1. 注解配置
    <!-- 数据源事务管理器 --><bean id="tranManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource" /></bean><!-- 开启事务的注解驱动 --><tx:annotation-driven transaction-manager="tranManager"></tx:annotation-driven>
  1. 事务注解
package com.lovely.service.impl;import com.lovely.dao.AccountDao;
import com.lovely.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;/*** @author echo lovely* @date 2020/8/9 11:08*/@Service("accountServiceImpl")
public class AccountServiceImpl implements AccountService {@Autowiredprivate AccountDao accountDao;/*** 转账业务具体实现 需要使用事务* @param outMan 转出人* @param inMan  收账人* @param money  money*/@Transactional(timeout = 1)public void transfer(String outMan, String inMan, Double money) {accountDao.in(inMan, money);System.out.println(1/0);accountDao.out(outMan, money);}
}

转账为demo,spring事务相关推荐

  1. Spring事务管理的demo

    事务是逻辑上的一组操作,这组操作要么全部成功,要么全部失败,最为典型的就是银行转账的案例: A要向B转账,现在A,B各自账户中有1000元,A要给B转200元,那么这个转账就必须保证是一个事务,防止中 ...

  2. Spring事务简介(案例:银行账户转账)

    目录 事务简介 : 银行账户转账代码实现: 需求: 分析: 分析结果: 一.解决办法(开启Spring事务管理步骤): 1.在业务层接口上添加Spring事务管理 2.设置事务管理器(在Spring ...

  3. spring事务管理-注解配置aop事务(重点)

    导包,导入新的约束,通知都不用配了,这两个是一样的,导包这一步,新的约束,tx这些都是一样的,第三步开始不同,这个注解配置大概一分钟就讲完了,第三步咱们可以开启注解,管理事务,那这块的话,咱们的配置文 ...

  4. spring事务管理-xml配置aop事务(重点)

    刚才咱们是使用了模板操作咱们事务,当然使用模板操作比较low,还得写代码,每个方法都写太费劲了,首先把之前写的先注释掉,把这个transfer这个代码直接复制一份,然后底下展一份,留着注释掉就行了,上 ...

  5. Spring事务概述

    Spring框架提供统一的事务抽象,通过统一的编程模型使得应用程序可以很容易地在不同的事务框架之间进行切换. 在学习Spring事务前,先对数据库事务进行简单的介绍. 数据库事务简介 构成单一逻辑工作 ...

  6. 聊聊Spring事务失效的12种场景,太坑人了

    前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了. 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据.为了保证操作的原子性(要么同时成功,要么同时失败),避免数据 ...

  7. Spring事务传播特性实例解析

    背景介绍 目前系统正在进行代码重构前期预研工作,目标采用spring控制事务以减少开发代码量,提高开发效率.同时避免开发人员编码控制事务所带来的链接没有释放,事务没有提交,出现异常事务没有回滚的Bug ...

  8. 透彻理解Spring事务设计思想之手写实现

    2019独角兽企业重金招聘Python工程师标准>>> 前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原 ...

  9. Spring事务专题(三)事务的基本概念,Mysql事务处理原理

    我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,等待 ...

最新文章

  1. php扩展xdebug基本使用
  2. 【Java 集合】Java 集合主要脉络 ( Collection | Map | List | Set )
  3. 人工智能、应用、程序
  4. 安装 Oracle Database PSU 10.2.0.4.2 步骤
  5. JDK7的六个新特性回顾和讲解
  6. 自己整理的css3动画库,附下载链接
  7. 乾通嗖嗖抢先布局多元化用工 实现全流程数智化人力管理
  8. MongoDB副本集、分片集的伪分布式部署(保姆级教程)
  9. varnish几个工具命令行工作情况
  10. linux 定时任务 crond 服务介绍
  11. 解决:/system/bin/sh: /system/bin/test-ndk: not executable: magic 7F45报错
  12. list 查找_趣味图解算法之二分查找
  13. 16 寸MacBook Pro比14 寸风扇更强大,更耐用
  14. 屏幕方向调节---LANDSCAPE与PORTRAIT
  15. 笔记:复杂度分析(上)
  16. matlab 2012 简明教程,MATLAB 2012简明教程
  17. 云服务器怎么安装声音驱动_GPU云服务器如何安装NVIDIA Tesla驱动
  18. 这份免税的农产品销售发票,可以抵扣9%的增值税吗?
  19. 如何修改PDF文件,PDF怎么插入图片
  20. 【华为校招】【校招】【Java】叠积木

热门文章

  1. oracle之单行函数之子查询课后练习2
  2. 前端学习(675):if else if
  3. java面试题4 牛客:运行下列代码,运行结果为
  4. java学习(42):巩固练习
  5. scratch的积木相与java的_scratch课堂:积木块详解
  6. CSS3之Transform
  7. stylus之运算符(Operators)
  8. python技巧(1)--如何转换itertools.chain对象为数组
  9. idea中lombok的使用
  10. First Steps with TensorFlow代码解析