转账为demo,spring事务

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);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420717.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

八、计数排序及其应用分析

1 本节思路 之前的算法的最基本的思想是比较元素大小&#xff0c;所以算法复杂度最好是Θ(nlogn)\Theta(nlogn)Θ(nlogn)&#xff0c;本节不再基于元素比较&#xff0c;而是基于计数的Counting sort&#xff0c;然后应用在Radix sort上。 2 Counting sort 2.1 算法思想 Cou…

Google开发者模式调试css样式的方法

界面如下&#xff0c;你需要调试css样式… 看下图&#xff0c;高仿某云播放界面部分 需求 1.h5开发手机端界面&#xff0c;禁用缩放 2.如何精准的定位像上图一样&#xff0c;或者更好 3.使用Google调试器&#xff0c;调试css样式如何调样式 选择对应的样式 确定多个元素…

OD汇编需要标签

如何解决&#xff0c;看那红体字。。。 push 0046ad70 标签就是地址的引用 zai破解的道路上面面前行 技术参考&#xff1a;http://zhidao.baidu.com/link?url8JP8KFxTinclhl6MwpaZw5buhtv1p4zgpjy8rKkBPvD4YqCq2uudXQZrhuBLPGZm5ahe3d7YsLb3MeAFDXfsua转载于:https://www.cnbl…

git与github使用

1 从github上clone到本地 配置Git 首先在本地创建ssh key&#xff1b; $ ssh-keygen -t rsa -C "your_emailyouremail.com"后面的your_emailyouremail.com改为你在github上注册的邮箱&#xff0c;之后会要求确认路径和输入密码&#xff0c;我们这使用默认的一路回车…

bootstrap panel 布局

panel1. 效果2. 基于bootstrap实现用于页面分专栏展示 1. 效果 成品 2. 基于bootstrap实现 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>panel 布局</title><link rel"stylesheet" href"cs…

35款让你爱不释手的网页元素PSD素材

网页元素是构成一个网页的基本元素&#xff0c;包括按钮、表单、文本框、进度条等。这里收集了30款让你爱不释手的网页元素PSD素材。 1、国外个性网页模板UI设计PSD素材 下载地址>>> 2、带分享按钮的网页导航栏UI设计PSD素材 下载地址>>> 3、两款简洁的搜索框…

DHCP中继

拓扑如下&#xff1a; R0配置&#xff1a; (config)#ip dhcp pool aaa (dhcp-config)#network 8.8.8.0 255.255.255.0 (dhcp-config)#default-router 8.8.8.1 (dhcp-config)#dns-server 114.114.114.114(config)#ip dhcp pool bbb (dhcp-config)#network 88.88.88.0 255.255.25…

maven项目,如何导入本地jar包

maven项目导入本地jar包&#xff0c;然后以pom坐标的方式引入项目。为何有这种奇怪的需求&#xff1f; maven 上找不到了对应的jar包了&#xff0c;没有对应的坐标。导入方式 将你本地的项目放入maven仓库&#xff0c;使用maven命令。而不是简单的复制进maven仓库。参数说明&…

centos7配置jdk1.8环境变量

目录1. Oracle下载linux版本的jdk2. 上传到linux服务器3. 解压4. 编辑环境变量1. Oracle下载linux版本的jdk https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html 2. 上传到linux服务器 使用工具 mobaxterm 上传jdk https://mobaxterm.mobatek…

spring mvc 入门DispatcherServlet转发

目录一&#xff0c;配置相关二&#xff0c;java类测试三&#xff0c;测试一&#xff0c;配置相关 maven坐标依赖 <dependencies><!-- spring context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context&…

web音乐播放器+后台歌曲,歌单管理

项目地址 https://github.com/sevenyoungairye/web_music_palyer技术点 - 基于h5, css3, js, bootstarp, jquery,- 后台基于structs1, spring, spring-jdbcTemplate功能 - 用户curd- 歌单curd&#xff0c;为歌单新增&#xff0c;移除歌曲- 上传歌曲&#xff0c;修改歌曲- 查询…