第六章 springboot + 事务
在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面。
mybatis与spring集成后,其事务该怎么做?其实很简单,直接在上一节代码的基础上在相应的方法(通常是service层)上加上@Transactional注解即可。
1、com.xxx.firstboot.exception.UserException
package com.xxx.firstboot.exception; import org.springframework.dao.DataAccessException; /**
* 自定义异常,用于测试事务
*/
public class UserException extends DataAccessException{ private static final long serialVersionUID = 8901479830692029025L; public UserException(String msg) {
super(msg);
} }
说明:这是一个自定义注解,继承了DataAccessException类。
2、com.xxx.firstboot.dao.UserDao
public int insertUser(String username, String password){
return userMapper.insertUser(username, password);
}
public void testTransactional(String username){
throw new UserException("测试事务");
}
说明:该类中对于事务的测试只使用到了两个方法,第二个方法testTransactional抛出自定义的异常。
3、com.xxx.firstboot.service.UserService
@Transactional
public void testTransaction(String username, String password){
System.out.println(userDao.insertUser(username, password));
userDao.testTransactional(username);
}
说明:在该方法中调用了上述的userDao的两个方法。
第一个方法向数据库插入一条数据,第二个方法抛出我们的自定义异常,如果事务配置成功,那么第一个方法插入数据库会回滚,否则,插入数据成功。
4、com.xxx.firstboot.controller.UserController
@ApiOperation("测试事务")
@ApiImplicitParams({
@ApiImplicitParam(paramType="query",name="username",dataType="String",required=true,value="用户的姓名",defaultValue="zhaojigang"),
@ApiImplicitParam(paramType="query",name="password",dataType="String",required=true,value="用户的密码",defaultValue="wangna")
})
@ApiResponses({
@ApiResponse(code=400,message="请求参数没填好"),
@ApiResponse(code=404,message="请求路径没有或页面跳转路径不对")
})
@RequestMapping(value="/testTransaction",method=RequestMethod.GET)
public void testTransaction(@RequestParam("username") String username,
@RequestParam("password") String password) {
userService.testTransaction(username, password);
}
测试:
使用maven命令启动服务-->swagger运行URL-->查看数据库是否插入成功
疑问:查了很多资料,mybatis与springboot集成后(数据源采用了druid),为了添加事务,很多人会在上一节的MyBatisConfig这个类中做两件事请
- 在MyBatisConfig类上添加@EnableTransactionManagement注解,该注解启用了注解式事务管理 <tx:annotation-driven />,这样在方法上的@Transactional注解就起作用了,但是实际测试中不加这句,@Transactional注解依然有用
- 在MyBatisConfig类中添加了获取事务管理器的方法
/**
* 配置事务管理器
*/
@Bean
@Primary
public DataSourceTransactionManager transactionManager() throws Exception{
return new DataSourceTransactionManager(getDataSource());
}添加这句的作用:在使用@Transactional注解的地方使用方法中的事务管理器进行事务管理。
第六章 springboot + 事务的更多相关文章
- 第六章 springboot + 事务(转载)
本篇博客转发自:http://www.cnblogs.com/java-zhao/p/5350106.html 在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. myba ...
- 第十六章 springboot + OKhttp + String.format
模拟浏览器向服务器发送请求四种方式: jdk原生的Http包下的一些类 httpclient(比较原始,不怎么用了):第一章 HttpClient的使用 Okhttp(好用,推荐) retrofit( ...
- SpringBoot | 第二十六章:邮件发送
前言 讲解了日志相关的知识点后.今天来点相对简单的,一般上,我们在开发一些注册功能.发送验证码或者订单服务时,都会通过短信或者邮件的方式通知消费者,注册或者订单的相关信息.而且基本上邮件的内容都是模版 ...
- 【第十六章】 springboot + OKhttp + String.format
模拟浏览器向服务器发送请求四种方式: jdk原生的Http包下的一些类 httpclient(比较原始,不怎么用了):第一章 HttpClient的使用 Okhttp(好用,推荐) retrofit( ...
- 第十六章 综合实例——《跟我学Shiro》
简单的实体关系图 简单数据字典 用户(sys_user) 名称 类型 长度 描述 id bigint 编号 主键 username varchar 100 用户名 password varchar 1 ...
- [CSAPP笔记][第六章存储器层次结构]
第六章 存储器层次结构 在简单模型中,存储器系统是一个线性的字节数组,CPU能够在一个常数访问每个存储器位置. 虽然是一个行之有效的模型,但没有反应现代系统实际工作方式. 实际上,存储器系统(memo ...
- 第十六章——处理锁、阻塞和死锁(3)——使用SQLServer Profiler侦测死锁
原文:第十六章--处理锁.阻塞和死锁(3)--使用SQLServer Profiler侦测死锁 前言: 作为DBA,可能经常会遇到有同事或者客户反映经常发生死锁,影响了系统的使用.此时,你需要尽快侦测 ...
- 一起来学Spring Cloud | 第六章:服务网关 ( Zuul)
本章节,我们讲解springcloud重要组件:微服务网关Zuul.如果有同学从第一章看到本章的,会发现我们已经讲解了大部分微服务常用的基本组件. 已经讲解过的: 一起来学Spring Cloud | ...
- 十六章 综合实例——《跟我学Shiro》
目录贴:跟我学Shiro目录贴 简单的实体关系图 简单数据字典 用户(sys_user) 名称 类型 长度 描述 id bigint 编号 主键 username varchar 100 用户名 pa ...
随机推荐
- php_sapi_name详解
php_sapi_name : — 返回 web 服务器和 PHP 之间的接口类型. 返回描述 PHP 所使用的接口类型(the Server API, SAPI)的小写字符串. 例如,CLI 的 P ...
- CRM 权限与分派不一样问题
问题描述: 1 userA用户 为 区域经理; 2 区域经理(角色) 为 分派给userA的安全角色; 3 区域经理(角色) 设置了对实体 客户 的读权限为 业务部门级; 按正常来说userA 应 ...
- 【IIS8】在IIS8添加WCF服务支持
最近在做Silverlight,Windows Phone应用移植到Windows 8平台,在IIS8中测试一些传统WCF服务应用,发现IIS8不支持WCF服务svc请求,后来发现IIS8缺少对WCF ...
- Excel jxl导入导出
JAVA EXCEL API简介 Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Wind ...
- 【MySQL】MySQL 5.7 sys Schema
sys库说明:http://dev.mysql.com/doc/refman/5.7/en/sys-schema-usage.html sys库使用说明:http://dev.mysql.com/do ...
- $.when().then()
当两个Ajax请求是成功的则执行函数myFunc,如果任一个有错误则执行myFailure. $.when($.ajax("/page1.php"), $.ajax("/ ...
- Mysql命令行中文乱码的解决方法
环境:Windows 8 64位,Mysql 5.0.96 for Win64 (x86) 数据库本身安装时默认已经是使用utf8编码的了,但在命令行中执行查询时,查询到的中文依然乱码,解决方法如下 ...
- Redis安装及主从配置
一.何为Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有 ...
- Framework7--Test
<!doctype html> <html> <head> <title>{{title}}</title> <meta charse ...
- Linux_03------Linux的基本命令
/** * 基本命令格式 * 命令 [选项] [参数] */ /** * 目录处理命令 * mkdir dirname 创建目录 * mkdir -p dir1/dir 递归创建目录 * cd dir ...