• 如何实现Spring的事务管理功能:@Transactional声明式事务


    Spring MVC中处理SQL事务,可以使用Spring的事务管理功能来实现。Spring提供了多种配置和编程方式来管理事务,以下是一种常见的基于注解的方法来处理SQL事务:

    1. 配置数据源和事务管理器:首先,您需要配置数据源和事务管理器。这通常在Spring的配置文件(如XML配置文件)中完成。以下是一个示例配置:

    ```xml

    1. <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    2. <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    3. <property name="url" value="jdbc:mysql://localhost:3306/db_hospital?serverTimezone=UTC"/>
    4. <property name="username" value="root"/>
    5. <property name="password" value="666666"/>
    6. <property name="initialSize" value="10"/>
    7. <property name="minIdle" value="5"/>
    8. <property name="maxActive" value="20"/>
    9. <property name="maxWait" value="60000"/>
    10. bean>
    11. <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    12.     <property name="dataSource" ref="dataSource" />
    13. bean>

    destroy-method="close" 是一个常见的配置选项,通常用于管理一些资源,如数据库连接池或文件流。当bean被销毁时,Spring会调用指定的销毁方法,以确保资源被正确释放或关闭,从而避免资源泄漏或其他问题。
    ```

    2. 使用 `@Transactional` 注解:在DAO层或Service层的Service实现类或接口的方法上使用`@Transactional`注解来标记需要进行事务管理的方法。例如:

    ```java

    1. @Service
    2. public class YourService {
    3.     
    4.     @Autowired
    5.     private YourDao yourDao;
    6.     @Transactional
    7.     public void performTransactionalOperation() {
    8.         // 在此处执行需要事务管理的数据库操作
    9.         yourDao.insertData();
    10.         yourDao.updateData();
    11.     }
    12. }


    ```

    3. 配置事务管理器和扫描注解:确保您的Spring配置文件中启用了注解扫描和事务管理器的配置:

    ```xml

    1. <context:component-scan base-package="com.your.package" />
    2. <tx:annotation-driven transaction-manager="transactionManager" />


    ```

    4. 在Controller中调用Service接口的方法:最后,在Controller中调用带有`@Transactional`注解的Service方法,以触发事务管理。

    1. package com.ekgc.controller;
    2. import com.ekgc.pojo.MedicalAdvice;
    3. import com.ekgc.response.RespBody;
    4. import com.ekgc.service.AddAdviceService;
    5. import org.springframework.beans.factory.annotation.Autowired;
    6. import org.springframework.web.bind.annotation.RequestBody;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RestController;
    9. /**
    10. * @author Magic
    11. * @version 1.0
    12. */
    13. @RestController
    14. public class AddAdviceController {
    15. @Autowired
    16. private AddAdviceService addAdviceService;
    17. @RequestMapping("/AddAdvice")
    18. public RespBody AddAdvice(@RequestBody MedicalAdvice advice){
    19. boolean addRes = addAdviceService.AddAdvice(advice);
    20. if (!addRes) {
    21. return new RespBody(501,null,"添加失败");
    22. }
    23. return new RespBody(200,null,"添加成功");
    24. }
    25. }

    这样配置后,如果在`AddAdvice`方法中的任何数据库操作失败,Spring将自动回滚事务,确保数据的一致性。如果所有操作成功,事务将提交。

    请注意,Spring提供了多种事务管理策略,包括声明式事务(如上述示例中的`@Transactional`注解)和编程式事务,您可以根据具体情况选择适合的方法来处理事务。同时,也要确保您的数据源和数据库驱动程序正确配置,以确保事务管理正常工作。

     

  • 相关阅读:
    Springboot日志记录方案—官方原版
    从链接器的角度详细分析g++报错: (.text+0x24): undefined reference to `main'
    git 中使用git clean删除未跟踪Untracked的文件
    【iOS】单例模式
    LeetCode题解:剑指 Offer 03. 数组中重复的数字,原地置换,JavaScript,详细注释
    (三)什么是Vite——Vite 主体流程(运行npm run dev后发生了什么?)
    Effective C++改善程序与设计的55个具体做法 6. 继承与面向对象设计
    贪心算法之过河问题
    PostgreSQL插件开发
    ubuntu 16.04 无法安装php7.4(16.04如何安装php7.4)
  • 原文地址:https://blog.csdn.net/qq_58647634/article/details/132759050