014 springboot整合mybatis使用声明式事务-尊龙官方平台

014 springboot整合mybatis使用声明式事务

el/2024/3/25 17:34:26

声明式的事务管理是基于aop的,在springboot中可以通过@transactional注解的方式获得支持,这种方式的优点是:

1)非侵入式,业务逻辑不受事务管理代码的污染。

2)方法级别的事务回滚,合理划分方法的粒度可以做到符合各种业务场景的事务管理。

在设计service层的时候,在需要开启事务的方法用@transactional注解,默认的话在抛出exception.class异常的时候,就会触发方法中所有数据库操作回滚,当然这指的是增、删、改。

你要在application类中开启事务管理,开启事务管理很简单,只需要@enabletransactionmanagement注解就行,就像这样:

@springbootapplication
@mapperscan(basepackages = "com.blacktv.springboot.database.mapper")//将指定包内自动注册为mapper接口
@enabletransactionmanagement()//开启声明式事务
public class springboothelloapplication {public static void main(string[] args) {springapplication.run(springboothelloapplication.class, args);}
}

注意开启事务要保证你的数据库引擎是innodb的。

案例:

stundetservice,这里只放出了有事务的方法:

/*** student类的业务逻辑类*/
@service
public class studentservice {@autowiredprivate studentmapper studentmapper;//在启动入口类用@mapperscan注解扫描mapper接口,idea可能会在这里报错,不用担心只是误报/*** 添加两个学生,测试事务。* 事务5秒后超时,发生arithmeticexception和ioexception异常时回滚事务** @return*/@transactional(timeout = 5, rollbackfor = {arithmeticexception.class, ioexception.class})public void adddouble(student student1, student student2) {studentmapper.add(student1);system.out.println(1 / 0);studentmapper.add(student2);}
}
@restcontroller
public class testa {@autowiredprivate studentservice studentservice;/*** 测试一下事务* @param name1* @param name2* @return*/@getmapping(value = "/adddouble")public string adddouble(string name1,string name2){studentservice.adddouble(new student(name1), new student(name2));return "test page";}
}

先调用一下添加两个学生的接口

通过查询方法查询一下,验证是否回滚了事务,可见是回滚了


http://www.ngui.cc/el/5127298.html

相关文章

015 spring boot配置mybatis多数据源

可能一个项目需要连接多个数据库,就代表有多个数据源,在项目中多数据源通过分包或注解来划分,这里用分包的方式配置。 多数据源理论上是可以引入无数多个的,但是限制于硬件的条件不可能做到引入无限多个数据源。 在编写多数据源的…

002 mysql安装与配置

安装mysql-5.5.40-winx64的过程 进行指定安装目录 后面一直点击下一步直到下图: 下面是选择服务器类型: 第一个是开发者机器,这种类型的库占用资源不多 第二个是服务器机器,这种类型的库占用资源比较多 第三个是专用数据库服务…

003 命令行连接mysql

先来看使用cmd连接mysql,再看使用连接mysql 回车之后需要再次输入密码,如果你要在本机登录root账户直接输入 mysql -u root -p show databases; 按下回车后会让你输入密码 然后按下回车输入(要有分号) show databases; 我们来看看使用mysql 5.5 command …

004 sql——结构化查询语言入门

sql指令是只能被数据库识别的指令,在java中我们要得到mysql数据库中表的一些记录,可以通过在java程序中写sql语句,就可以获取mysql中的数据并返回给java程序。 刚刚说赋值运算符是””,而且比较运算符也是””, decima…

024 union 和 union all 连接查询结果语句

union 操作符用于合并两个或多个 select 语句的结果集。 union 内部的 select 语句必须拥有相同数量的行 语法 select column_name(s) from table_name1 union select column_name(s) from table_name2案例:使用union连接、左连接、右连接语句,实现全…

017 inner join on 多表连接查询语句

inner join on 内连接语句,这个语句用于匹配多个表 inner join 关键字语法 select 要查询的字段 #可以查询表1的也可以查询表n的也可以是通配符 * from table_1 #第一张表 inner join table_2 on table_2.id table_1.id #关联第二张表 inner join table_n on…

020 exists 与 not exists 子查询语句

查询学生表中,成绩大于等于70分的学生,只显示前五名,降序排列 /*查找分数大于等于70的学生成绩只要前五名,降序排列*/ select * from stu inner join fraction on fraction.idstu.id where exists (select id from fraction where…

001 安装opencv并且配置idea开发环境

访问opencv的尊龙官方平台官网下载jar,我这里选择的4.5版本https://opencv.org/ 下载完成后运行,选择你要安装的目录,点击解压 完事之后打开idea,新建一个工程,然后引入opencv的依赖 然后会让你选择为哪个项目引入依赖,…

mysql delete条件使用select结果

前段时间要写一个根据查询结果删除条目的sql,踩到了mysql的一个坑,在此记录一下 先放正确写法 delete from mei_tuan_order_goods where id in(select max(a.id) as id from (select a.id from mei_tuan_order_goods as ajoin mei_tuan_order_main as …

001 初始react,与环境搭建

注意:这是我学习react时记录下的个人笔记 在学习react之前请先按照nodejs下的笔记安装开发环境。 react是facebook开发的js框架,先看看他的特点: react不使用模板 react不是mvc框架 react是响应式的 react是一个轻量级的js框架react的原理&…
网站地图