7、SpringBoot2之整合事务及AOP

打印 上一主题 下一主题

主题 906|帖子 906|积分 2718

本文在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、测试效果



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表