ToB企服应用市场:ToB评测及商务社交产业平台

标题: 7、SpringBoot2之整合事务及AOP [打印本页]

作者: 伤心客    时间: 2024-3-22 23:35
标题: 7、SpringBoot2之整合事务及AOP
本文在SpringBoot2之整合Mybatis的基础上进行
7.1、整合事务

7.1.1、mapper接口

  1.     int deleteEmployeeById(int id);
复制代码
7.1.2、mapper映射文件

  1.     <delete id="deleteEmployeeById" parameterType="int">
  2.         delete from t_emp where emp_id = #{id}
  3.     </delete>
复制代码
7.1.3、业务层接口及实现类

  1. package online.liaojy.service;
  2. /**
  3. * @author liaojy
  4. * @date 2023/12/25 - 6:31
  5. */
  6. public interface EmployeeService {
  7.     int deleteEmployeeById(int id);
  8. }
复制代码

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

  1.     @Autowired
  2.     private EmployeeService employeeService;
  3.     @RequestMapping("/deleteEmployeeById")
  4.     public String deleteEmployeeById(){
  5.         int i = employeeService.deleteEmployeeById(26);
  6.         return "删除成功";
  7.     }
复制代码
7.1.5、测试效果


测试前的数据

测试时发生异常

测试后的数据没变化,说明事务回滚功能正常
7.2、整合AOP

7.2.1、导入AOP启动器依赖

  1.         
  2.         <dependency>
  3.             <groupId>org.springframework.boot</groupId>
  4.             <artifactId>spring-boot-starter-aop</artifactId>
  5.         </dependency>
复制代码
7.2.2、创建切面类

  1. package online.liaojy.advice;
  2. import org.aspectj.lang.JoinPoint;
  3. import org.aspectj.lang.annotation.Aspect;
  4. import org.aspectj.lang.annotation.Before;
  5. import org.springframework.core.annotation.Order;
  6. import org.springframework.stereotype.Component;
  7. /**
  8. * @author liaojy
  9. * @date 2023/12/25 - 6:51
  10. */
  11. @Component
  12. @Aspect
  13. @Order(5)
  14. public class LogAdvice {
  15.     @Before("execution(* online.liaojy.service.*.*.*(..))")
  16.     public void beforeLog(JoinPoint joinPoint){
  17.         // 获取连接点所对应目标方法所在类的名称
  18.         String className = joinPoint.getSignature().getClass().getSimpleName();
  19.         // 获取连接点所对应目标方法的名称
  20.         String methodName = joinPoint.getSignature().getName();
  21.         System.out.println(className+"类的"+methodName+"方法开始执行了!");
  22.     }
  23. }
复制代码
7.2.3、测试效果



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4