7、SpringBoot2之整合事务及AOP
本文在SpringBoot2之整合Mybatis的基础上进行
7.1、整合事务
7.1.1、mapper接口

int deleteEmployeeById(int id);
7.1.2、mapper映射文件

<delete id="deleteEmployeeById" parameterType="int">
delete from t_emp where emp_id = #{id}
</delete>
7.1.3、业务层接口及实现类

package online.liaojy.service;
/**
* @author liaojy
* @date 2023/12/25 - 6:31
*/
public interface EmployeeService {
int deleteEmployeeById(int id);
}

注意:只要引入 spring-boot-starter-jdbc 启动器(详见6.1节),spring boot 便会自动配置好 DataSourceTransactionManager ;
因此,只需在方法(或者类)加上 @Transactional 注解,即可进行事务管理。
package online.liaojy.service.impl;
import online.liaojy.mapper.EmployeeMapper;
import online.liaojy.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/**
* @author liaojy
* @date 2023/12/25 - 6:33
*/
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
@Transactional
@Override
public int deleteEmployeeById(int id) {
// 删除一条数据
int rowsOfDelete = employeeMapper.deleteEmployeeById(id);
System.out.println("已成功删除"+rowsOfDelete+"行数据");
// 制造一个异常
int i = 1/0;
return rowsOfDelete;
}
}
7.1.4、控制层方法

@Autowired
private EmployeeService employeeService;
@RequestMapping("/deleteEmployeeById")
public String deleteEmployeeById(){
int i = employeeService.deleteEmployeeById(26);
return "删除成功";
}
7.1.5、测试效果

测试前的数据

测试时发生异常

测试后的数据没变化,说明事务回滚功能正常
7.2、整合AOP
7.2.1、导入AOP启动器依赖

<!-- AOP启动器的依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
7.2.2、创建切面类

package online.liaojy.advice;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* @author liaojy
* @date 2023/12/25 - 6:51
*/
@Component
@Aspect
@Order(5)
public class LogAdvice {
@Before("execution(* online.liaojy.service.*.*.*(..))")
public void beforeLog(JoinPoint joinPoint){
// 获取连接点所对应目标方法所在类的名称
String className = joinPoint.getSignature().getClass().getSimpleName();
// 获取连接点所对应目标方法的名称
String methodName = joinPoint.getSignature().getName();
System.out.println(className+"类的"+methodName+"方法开始执行了!");
}
}
7.2.3、测试效果

7、SpringBoot2之整合事务及AOP的更多相关文章
- 【SpringBoot】息队列介绍和SpringBoot2.x整合RockketMQ、ActiveMQ
========================13.消息队列介绍和SpringBoot2.x整合RockketMQ.ActiveMQ ======================= 1.JMS介绍和 ...
- 消息队列介绍和SpringBoot2.x整合RockketMQ、ActiveMQ 9节课
1.JMS介绍和使用场景及基础编程模型 简介:讲解什么是小写队列,JMS的基础知识和使用场景 1.什么是JMS: Java消息服务(Java Message Service),Java ...
- SpringBoot2.x整合Shiro(一)
一:什么是ACL和RBAC: ACL: Access Control List 访问控制列表 以前盛行的一种权限设计,它的核心在于用户直接和权限挂钩 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩 ...
- 【SpringBoot】SpringBoot2.x整合Shiro(一)
一:什么是ACL和RBAC: ACL: Access Control List 访问控制列表 以前盛行的一种权限设计,它的核心在于用户直接和权限挂钩 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩 ...
- 第二篇:SpringBoot2.0整合ActiveMQ
本篇开始将具体介绍SpringBoot如何整合其它项目. 如何创建SpringBoot项目 访问https://start.spring.io/. 依次选择构建工具Maven Project.语言ja ...
- SpringBoot2.x整合Redis实战 4节课
1.分布式缓存Redis介绍 简介:讲解为什么要用缓存和介绍什么是Redis,新手练习工具 1.redis官网 https://redis.io/download 2.新手 ...
- Spring整合AspectJ的AOP
学而时习之,不亦说乎! --<论语> 看这一篇之前最好先看前面关于AOP的两篇. http://www.cnblogs.com/z ...
- Spring事务管理—aop:pointcut expression 常见切入点表达式及事务说明
Spring事务管理—aop:pointcut expression 常见切入点表达式及事物说明 例: <aop:config> <aop:pointcut expression= ...
- SpringBoot2.0 整合 QuartJob ,实现定时器实时管理
一.QuartJob简介 1.一句话描述 Quartz是一个完全由java编写的开源作业调度框架,形式简易,功能强大. 2.核心API (1).Scheduler 代表一个 Quartz 的独立运行容 ...
- SpringBoot2.0 整合 Swagger2 ,构建接口管理界面
一.Swagger2简介 1.Swagger2优点 整合到Spring Boot中,构建强大RESTful API文档.省去接口文档管理工作,修改代码,自动更新,Swagger2也提供了强大的页面测试 ...
随机推荐
- Opencv笔记(13)积分图
积分图时一种允许子区域快速求和的数据结构,这种求和在很多方面都很有用,值得一提的是haar小波的计算,它用于人脸识别和类似的算法.Opencv支持积分图的三种变体,分别是总和.平方求和以及倾斜求和.每 ...
- 查看SO KO 执行程序相关信息命令
1 查看SO 查看so库的方法__臣本布衣_新浪博客 (sina.com.cn) 1.nm -D libxxx.so 打印出符号信息. 一般这样用:nm -D libxxx.so |grep T $ ...
- Centos7安装Nginx教程,一步安装http和https
nginx是一款轻量级web服务器,主要有负载均衡和反向代理的特性. 安装准备 nginx一些模块需要依赖lib库,所以先安装lib库,执行以下命令: [root@localhost local]# ...
- 你知道键盘是如何工作的吗?(xv6键盘驱动程序)
键盘驱动程序 公众号:Rand_cs 键盘如何工作的前文曾经说过,当时是以 Linux 0.11 为基础讲的但不系统,本文以 xv6 的键盘驱动程序为例来系统地讲述键盘是如何工作的.关于驱动程序前文磁 ...
- 对pta的总结_1
前言 这三次pta难度在不断上升的同时,要求我们线上慕课+自主学习来了解更多的java中的各种方法,如:正则表达式 List Map等.与此同时要求我们展开尝试并熟练类的构造,类的引用,链表的基本运用 ...
- 项目管理--PMBOK 读书笔记(8)【项目质量管理】
1.数据表现-流程图: 流程图也称为过程图,用来显示在一个或者多个输入转化为一个或者多个输入出的过程. 2.质量工具图比较: 发现问题:控制图(七点规则等).趋势图 寻找原因:因果图.流程图 分析原因 ...
- 警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除
警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除 import org.apache.commons.codec.binary.Base64; public class ...
- 解决 Visual C++ 17.5 __cplusplus 始终为 199711L 的问题
00. 软件环境 Visual Studio 2022, Visual C++, Version 17.5.4 01. 问题描述 在应用 https://github.com/ToniLipponen ...
- float与byte[]互相转换
今天想利用socket发送数据,可是float类型该怎么发送呢?我的想法是先转换成byte[]型,接收之后再转换回来. float类型是4个字节,而byte是1个字节,所以需要转换成为byte[]的类 ...
- 2019-2020 ICPC, NERC, Southern and Volga Russian Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) M. SmartGarden 题解
cf1250 M. SmartGarden 完全不会做 orz,在 cf 上看到了有趣的做法. 通读题意后可以发现是对于每一次操作,要求选出的行集合 \(R\) 和列集合 \(C\) 要满足如下条件: ...