ssm mysql 事物_SSM - 事务回滚(注解方式实现)

SSM - 事务回滚(注解方式实现)

发布时间:2018-12-09 18:44,

浏览次数:913

, 标签:

SSM

文章目录

* MYSQL 表的类型必须是 INNODB 才支持事务。

* 核心代码

* 在配置文件注册事务管理器和开启注解驱动

* 在 Service 实现类编写方法并使用注解

* 完整 Demo

<>MYSQL 表的类型必须是 INNODB 才支持事务。

MYSQL 表的类型必须是 INNODB 才支持事务。

在 Mysql 中,只有当表的类型是 INNODB 的时候,才支持事务,所以需要把表的类型设置为 INNODB, 否则无法观察到事务。如果当前的

MYSQL 服务器本身不支持 INNODB, 需要开启 MYSQL INNODB。

查看表的类型的 SQL: show table status from daily;

修改表的类型为 INNODB 的 SQL: alter table note ENGINE = innodb;

利用 navicat 查看表类型

MySQL 表类型 MyISAM/InnoDB 的区别

MyISAM:这个是默认类型,ISAM 是 Indexed Sequential Access Method (有索引的顺序访问方法)

的缩写,它是存储记录和文件的标准方法。不是事务安全的,也不支持外键。如果执行大量的 SELECT,MyISAM 是更好的选择。

InnoDB:这种类型是事务安全的,还支持外键。InnoDB 表格速度很快。如果你的数据执行大量的 INSERT 或

UPDATE,出于性能方面的考虑,应该使用 InnoDB 表,对于支持事物的 InnoDB 类型的表,影响速度的主要原因是 AUTOCOMMIT

默认设置是打开的,而且程序没有显式调用 BEGIN 开始事务,导致每插入一条都自动 Commit,严重影响了速度。可以在执行 SQL 前调用 BEGIN,多条

SQL 形成一个事物(即使 AUTOCOMMIT 打开也可以),将大大提高性能。

<>核心代码

<>在配置文件注册事务管理器和开启注解驱动

applicationContext.xml

"transactionManager"/>

"org.springframework.jdbc.datasource.DataSourceTransactionManager">

name="dataSource" ref="dataSource"/>

<>在 Service 实现类编写方法并使用注解

此处,数据库中限制了 Student 表的 name 字段长度,如超过会出现异常。因为 add(s2) 抛异常,回滚后,会导致 s1 也无法插入。

StudentServiceImpl.java

@Override @Transactional(propagation= Propagation.REQUIRED,rollbackForClassName

="Exception") public void addTwoStudentThrowsException(Student s1,Student s2) {

studentDao.insertStudent(s1); studentDao.insertStudent(s2); }

测试

@Test public void test2() { Student s1 = new Student("张三",23); Student s2 = new

Student("字段长度超过限制,字段长度超过限制",25); studentService.addTwoStudentThrowsException(s1,

s2); }

异常信息

org.springframework.dao.DataIntegrityViolationException: ### Error querying

database. Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too

long for column 'name' at row 1

也可以自定义异常:

SqlRollbackException.java

public class SqlRollbackException extends RuntimeException { public

SqlRollbackException() { super(); } public SqlRollbackException(String message)

{ super(message); } }

StudentServiceImpl.java

@Override @Transactional public void addTwoStudentThrowsCustomException(

Student s1,Student s2) { try { studentDao.insertStudent(s2); studentDao.

insertStudent(s1); }catch (Exception e){ throw new SqlRollbackException("异常,回滚")

; } }

测试

@Test public void test3() { Student s1 = new Student("张三",23); Student s2 = new

Student("字段长度超过限制,字段长度超过限制",25); studentService.

addTwoStudentThrowsCustomException(s1,s2); }

异常信息

top.qingrang.exception.SqlRollbackException: 异常,回滚

效果同上,两条记录都无法插入数据库。

<>完整 Demo

https://github.com/SSGamble/TransactionDemo

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、简介 通过这个课程带大家从零开发一款功能全面的后台管理系统,包括项目搭建、功能实现到最后的Linux系统部署全过程。本课程使用SpringMVC + Spring + Mybatis作为主体框架,使用AdminLTE作为前端框架,使用主流关系型数据库Mysql作为存储数据库,使用非关系型数据库Redis作为缓存数据库,并集成SpringSecuriy安全框架做权限的动态管理,集成Swagger2自动生成接口文档,集成Druid连接池进行SQL性能监控,集成ActiveMQ消息中间件进行异步解耦,提高性能。最后使用linux系统进行服务部署,并搭建nginx反向代理服务器提高网站性能。 二、学习目标 通过本课程的学习带大家掌握SSM框架的开发流程,并熟练使用SpringSecurity做为安全框架进行权限管理,整合相关优秀的开源框架进行功能开发。还在项目中带大家学习前端相关的Jquery、Bootstrap等知识。课程结束之后希望大家能做到独立进行开发项目的目的,增强解决问题的能力,具备功能落地实现的能力。 三、课程涉及知识点 SpringMVC源码分析Mybatis源码分析通用MapperMysql数据库Redis缓存实现ActiveMQ消息中间件SpringSecurity鉴权Swagger2接口文档生成自定义注解AOP切面编程自定义过滤器Logback日志整合Druid性能监控Linux系统Nginx反向代理Ajax异步请求技术Jquery基本使用AdminLTE前端框架Chart图表-线状图和饼状图百度地图定位城市BootStrap前端框架BootStrap-Table插件BootStrap-Treeview插件Markdown编辑器403、404、500错误页面配置数据库事务消息提示插件toastr.js图片上传插件bootstrap fileinput数字滚动效果pv/uv流量统计...四、课程部分内容截图如下 1、首页 2、菜单管理 3、图床管理 4、图标管理 5、留言反馈管理 6、druid监控 7、登录日志

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值