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也提供了强大的页面测试 ... 
随机推荐
- linux使用过程中遇到的常见问题
			1 xxxx is not in the sudoers file. This incident will be reported. 解决方式:https://www.cnblogs.com/xym4 ... 
- 已将此(这些)订阅标记为不活动,必须将其重新初始化。需要删除 NoSync 订阅,然后重
			已将此(这些)订阅标记为不活动,必须将其重新初始化.需要删除 NoSync 订阅,然后重 查找状态不正常的发布 use distribution go select status,*from dbo. ... 
- Fastjson基础环境配置与Java基础概念
			Preface 此篇系列文章将会从 Java 的基础语法开始,以 Fastjson 的各个反序列化漏洞分析为结尾,详细记录如何从一个具有基础面向对象编程但毫无 Java 基础的小白成长为了解 Fast ... 
- Flash驱动控制--芯片擦除(SPI协议)
			摘要: 本篇博客具体包括SPI协议的基本原理.模式选择以及时序逻辑要求,采用FPGA(EPCE4),通过SPI通信协议,对flash(W25Q16BV)存储的固化程序进行芯片擦除操作. 关键词:SPI ... 
- RSA密码系统的特定密钥泄露攻击与Coppersmith方法的应用
			PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全.密码学.联邦学习.同态加密等隐私计算领域的技术和内容. RSA密码系统作为当前最广泛使用的公钥加密算法之一,其安全性依赖 ... 
- Windows下Qt5程序打包发布
			Windows下Qt5程序打包发布与图标设置 原文(有删改):https://blog.csdn.net/qq_39105333/article/details/114779650 设置程序图标 默认 ... 
- manim边学边做--MathTex
			上一篇介绍的SingleStringMathTex主要用来显示只有一行的数学公式,对于复杂的数学公式,可以使用MathTex类. MathTex类继承自SingleStringMathTex,在其基础 ... 
- 新品再袭,比RK3568J降本40%+,瑞芯微最新性价比工业平台-RK3562J
- 工控必备!NXP i.MX 8M Mini开发板规格书资料分享,高性能低功耗!
			1 核心板简介 创龙科技SOM-TLIMX8-B是一款基于NXP i.MX 8M Mini的四核ARM Cortex-A53 + 单核ARM Cortex-M4异构多核处理器设计的高端工业级核心板,A ... 
- 【价格全面下调】一片含税79元,双核A7@1.2GHz,-40℃~85℃真工业级!
			自9个月前,创龙科技全志T113-i核心板(SOM-TLT113)推出之后,受到广大工业用户的高度关注,且超过300家企业已选用创龙科技T113-i核心板用于终端产品开发. 为了让更多用户轻松选择T1 ... 
