news 2026/4/16 7:13:01

springboot事务触发滚动与不滚蛋

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
springboot事务触发滚动与不滚蛋

事务触发滚动与不滚蛋

代码:

MyBatisConfig 类

package org.example.testproduct; import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; import org.apache.ibatis.session.SqlSessionFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; @Configuration //@EnableTransactionManagement public class MyBatisConfig { private final DataSource dataSource; public MyBatisConfig(DataSource dataSource) { this.dataSource = dataSource; } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { System.out.println("dataSource1 = " + dataSource); // 使用MyBatis-Plus提供的SqlSessionFactoryBean MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); // 移除对XML映射文件的依赖,MyBatis-Plus可以自动生成SQL return factoryBean.getObject(); } @Bean public PlatformTransactionManager transactionManager() { System.out.println("new DataSourceTransactionManager()"+new DataSourceTransactionManager(dataSource)); return new DataSourceTransactionManager(dataSource); } }

Order 类

package org.example.testproduct.order; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("orders") public class Order { private Long id; private String orderNo; private Integer amount; }
OrderController类
package org.example.testproduct.order; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class OrderController { @Autowired private OrderService orderService; // 访问这个接口,事务会回滚 @GetMapping("/order/tx") public String orderWithTx() { try { orderService.createOrderWithTransaction(); } catch (Exception e) { return "Exception caught, transaction should rollback: " + e.getMessage(); } // orderService.createOrderWithTransaction(); return "ok"; } // 访问这个接口,事务不会回滚 @GetMapping("/order/notx") public String orderWithoutTx() { try { orderService.createOrderWithoutTransaction(); } catch (Exception e) { return "Exception caught, transaction will NOT rollback: " + e.getMessage(); } return "ok"; } }

OrderMapper 接口

package org.example.testproduct.order; import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface OrderMapper extends BaseMapper<Order> { }

OrderService 类

package org.example.testproduct.order; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class OrderService { @Autowired private OrderMapper orderMapper; // 这个方法有事务 @Transactional public void createOrderWithTransaction() { Order order = new Order(); order.setOrderNo("ORD-TX-" + System.currentTimeMillis()); order.setAmount(100); orderMapper.insert(order); // 制造异常 int x = 1 / 0; } // 这个方法没有事务 public void createOrderWithoutTransaction() { Order order = new Order(); order.setOrderNo("ORD-NO-" + System.currentTimeMillis()); order.setAmount(200); orderMapper.insert(order); // 制造异常 int x = 1 / 0; } }

依赖:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>4.0.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>org.example</groupId> <artifactId>testproduct</artifactId> <version>0.0.1-SNAPSHOT</version> <name>testproduct</name> <description>testproduct</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- MySQL JDBC 驱动 --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-spring-boot3-starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.9</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

运行效果:

用apifox插件检查接口。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:21:21

5. enum(枚举)关键字在C/C++中的作用

enum&#xff08;枚举&#xff09;关键字本质是用来定义一组有名字的整数常量&#xff0c;替代直接使用魔法数字&#xff08;比如 0、1、2&#xff09;&#xff0c;让代码更易读、易维护。 1. 什么是enum&#xff1f;&#xff08;核心概念&#xff09; enum&#xff08;枚举类型…

作者头像 李华
网站建设 2026/4/16 11:13:41

MATLAB实现流形正则化主题模型LapPLSI算法详解

在文本挖掘和主题建模领域,传统的pLSA(Probabilistic Latent Semantic Analysis)和LDA模型假设文档独立同分布,但现实中文档往往存在内在关联(如引用关系、相似内容或社交网络)。为了利用这些文档间的流形结构,研究者提出了Laplacian Probabilistic Latent Semantic Ind…

作者头像 李华
网站建设 2026/4/16 14:50:03

操作mysql常用python脚本,强到爆炸

1.导出数据库指定表的所有字段(含有字段注释)和数据导出结果如下#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ MySQL数据导出工具 - 修复元组索引问题 """import pandas as pd import pymysql import openpyxl from openpyxl.utils impo…

作者头像 李华
网站建设 2026/4/16 14:50:17

前后端分离学科竞赛管理系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着信息技术的快速发展&#xff0c;学科竞赛管理系统的信息化和智能化需求日益增长。传统的学科竞赛管理模式依赖人工操作&#xff0c;效率低下且容易出错&#xff0c;难以满足大规模竞赛活动的需求。为了解决这一问题&#xff0c;设计并实现一个基于前后端分离架构的学科…

作者头像 李华