Spring 框架事务管理机制,和实现方式

Spring3和Hibernate4中注解方式的声明式事务管理配置 Spring框架自2003年问世以来,已成为Java企业级应用开发的事实标准。它致力于简化企业级应用开发,提供了一整套的解决方案,从基础的控制反转(IoC)和面向切面编程(AOP),到事务管理、数据访问、消息服务等。Spring的出现,让开发者能够专注于业务逻辑的实现,而不必过多地担心底层的实现细节。 阅读详情

一、Spring事务管理

`Spring`事务管理的本质就是封装了数据库对事务支持的操作,使用JDBC的事务管理机制,就是利用`java.sql.Connection`对象完成对事务的提交和回滚。

概念:逻辑上的一组操作,组成该组操作的每个单元,要么同时成功,要么同时失败。

 

Connection conn = DriverManager.getConnection();
try {  
    // 自动提交设置为false
    conn.setAutoCommit(false);
    // 执行增删改查操作
    // 当操作成功后手动提交
    conn.commit();  
} catch (Exception e) {
    // 出现异常,回滚所有操作
    conn.rollback();
    e.printStackTrace();
} finally {
    conn.colse();
}

 

2、事务常见概念

  • 事务

事务是指作为单个逻辑工作单元执行的一系列操作(SQL语句)。这些操作要么全部成功,要么全部不成功。

  • 特性:ACID

原子性(Atomicity):事务中的多个操作要么都成功要么都失败
一致性(consistency):事务的执行的前后数据的完整性保持一致
隔离性(isolation):事务执行的过程中,不应该受到其他事务的干扰
持久性(durability):事务一旦结束,数据就持久到数据库

  • 隔离问题

 **脏读**:一个事务读到另一个事务没有提交的数据

 所谓脏读,就是指**事务A读到了事务B还没有提交的数据**,比如银行取钱,事务A开启事务,此时切换到事务B,事务B开启事务-->取走100元,此时切换回事务A,事务A读取的肯定是数据库里面的原始数据,因为事务B取走了100块钱,并没有提交,数据库里面的账务余额肯定还是原始余额,这就是脏读。

 **不可重复读**:一个事务前后多次读取相同数据,数据内容不一致,update场景问题

 所谓不可重复读,就是指**在一个事务里面读取了两次某个数据,读出来的数据不一致**。还是以银行取钱为例,事务A开启事务-->查出银行卡余额为1000元,此时切换到事务B事务B开启事务-->事务B取走100元-->提交,数据库里面余额变为900元,此时切换回事务A,事务A再查一次查出账户余额为900元,这样对事务A而言,在同一个事务内两次读取账户余额数据不一致,这就是不可重复读。

 虚读(幻读):一个事务前后多次读取,数据总量不一致,insert场景问题

 所谓幻读,就是指**在一个事务里面的操作中发现了未被操作的数据**。比如学生信息,事务A开启事务-->修改所有学生当天签到状况为false,此时切换到事务B,事务B开启事务-->事务B插入了一条学生数据,此时切换回事务A,事务A提交的时候发现了一条自己没有修改过的数据,这就是幻读,就好像发生了幻觉一样。幻读出现的前提是并发的事务中有事务发生了插入、删除操作。

- 隔离级别

 

  • 补充:

    • 事务隔离级别为ISOLATION_READ_UNCOMMITTED时,写数据只会锁住相应的行。

    • 事务隔离级别为可ISOLATION_REPEATABLE_READ时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。

    • 事务隔离级别为ISOLATION_SERIALIZABLE时,读写数据都会锁住整张表。

    • 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也就越大。

  • 不考虑隔离性引发的安全问题

 

`read uncommitted`:

事务可以读取另一个未提交事务的数据。

`read committed`:

事务要等另一个事务提交后才能读取数据,解决脏读。

`repeatable read`:

在开始读取数据时,事务开启,不再允许修改操作,解决:脏读、不可重复读。

`serializable`:

最高事务隔离级别,事务串行化顺序执行,解决脏读、不可重复读、幻读。但是效率低下,耗数据库性能。

3、事务管理API描述

  • PlatformTransactionManager

平台事务管理器,Spring管理事务,必须使用事务管理器进行事务配置时,核心方法:获取事务,提交事务,回滚事务。

  • TransactionDefinition

该对象封装事务详情(事务定义、事务属性),例如:隔离级别、是否只读、超时时间 等。

  • TransactionStatus

用于记录当前事务运行状态。例如:是否有保存点,事务是否完成。Spring底层根据状态进行相应操作。

4、事务案例SQL语句

CREATE TABLE user_account(
  id INT PRIMARY KEY AUTO_INCREMENT,
  username VARCHAR(50),
  money INT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;;
INSERT INTO user_account(username,money) VALUES('jack','5000');
INSERT INTO user_account(username,money) VALUES('tom','5000');
SELECT * FROM user_account ;

5.事务的传播行为

 

TransactionDefinition.PROPAGATION_NEVER如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
TransactionDefinition.PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务,则加入到这个事务中。这是最常见的选择。
TransactionDefinition.PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行。
TransactionDefinition.PROPAGATION_MANDATORY表示该方法必须在事务中运行,如果当前事务不存在,则会抛出一个异常
TransactionDefinition.PROPAGATION_REQUIRED_NEW表示当前方法必须运行在它自己的事务中。一个新的事务将被启动。如果存在当前事务,在该方法执行期间,当前事务会被挂起。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED表示该方法不应该运行在事务中。如果当前存在事务,就把当前事务挂起。
TransactionDefinition.PROPAGATION_NEVER表示当前方法不应该运行在事务上下文中。如果当前正有一个事务在运行,则会抛出异常

6.回滚规则

​    事务回滚规则定义了哪些异常会导致事务回滚而哪些不会。默认情况下,只有未检查异常(RuntimeException和Error类型的异常)会导致事务回滚。而在遇到检查型异常时不会回滚。 但是你可以声明事务在遇到特定的检查型异常时像遇到运行期异常那样回滚。同样,你还可以声明事务遇到特定的异常不回滚,即使这些异常是运行期异常。

7.事务超时

​    为了使应用程序很好地运行,事务不能运行太长的时间。因为事务可能涉及对后端数据库的锁定,也会占用数据库资源。事务超时就是事务的一个定时器,在特定时间内事务如果没有执行完毕,那么就会自动回滚,而不是一直等待其结束。

8.是否只读

​    如果在一个事务中所有关于数据库的操作都是只读的,也就是说,这些操作只读取数据库中的数据,而并不更新数据, 这个时候我们应该给该事务设置只读属性,这样可以帮助数据库引擎优化事务。提升效率。

 二、@Transactional使用

Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式:

  • 编程式事务:允许用户在代码中精确定义事务的边界。编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

  • 声明式事务: 基于AOP,有助于用户将操作与事务规则进行解耦。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务管理也有两种常用的方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional注解的方式。显然基于注解的方式更简单易用,更清爽。@Transactional注解的使用也是我们本文着重要理解的部分。

显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

2.1 @Transactional注解属性

@Transactional注解里面的各个属性和咱们在上面讲的事务属性里面是一一对应的。用来设置事务的传播行为、隔离规则、回滚规则、事务超时、是否只读。

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
​
    /**
     * 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器。
     */
    @AliasFor("transactionManager")
    String value() default "";
​
    /**
     * 同上。
     */
    @AliasFor("value")
    String transactionManager() default "";
​
    /**
     * 事务的传播行为,默认值为 REQUIRED。
     */
    Propagation propagation() default Propagation.REQUIRED;
​
    /**
     * 事务的隔离规则,默认值采用 DEFAULT。
     */
    Isolation isolation() default Isolation.DEFAULT;
​
    /**
     * 事务超时时间。
     */
    int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;
​
    /**
     * 是否只读事务
     */
    boolean readOnly() default false;
​
    /**
     * 用于指定能够触发事务回滚的异常类型。
     */
    Class<? extends Throwable>[] rollbackFor() default {};
​
    /**
     * 同上,指定类名。
     */
    String[] rollbackForClassName() default {};
​
    /**
     * 用于指定不会触发事务回滚的异常类型
     */
    Class<? extends Throwable>[] noRollbackFor() default {};
​
    /**
     * 同上,指定类名
     */
    String[] noRollbackForClassName() default {};
​
}

2.2想看其他可以 自行查看

Spring 事务 -- @Transactional的使用 - 简书

ADS使用Smith圆图进行阻抗匹配 在处理RF系统的实际应用问题时,总会遇到一些非常困难的工作,对各部分级联电路的不同阻抗进行匹配就是其中之一。一般情况下,需要进行匹配的电路包括天线与低噪声放大器(LNA)之间的匹配、功率放大器输出(RFOUT)与天线之间的匹配、LNA/VCO输出与混频器输入之间的匹配。匹配的目的是为了保证信号或能量有效地从“信号源”传送到“负载”。 阻抗匹配(impedance matching) 信号源内阻与所接传输线的特性阻抗大小相等且相位相同,或传输线的特性阻抗与所接负载阻抗的大小相等且相位相同,分别称为传输线的输 阅读详情

相关推荐

NFC门禁卡复制全解析:从M1卡到UID卡的攻防实践

本文深入解析了NFC门禁卡的安全机制与攻防实践。从M1卡基于Crypto1算法的原理漏洞讲起,详细阐述了利用Proxmark3等工具进行侦听、破解密钥及使用UID卡进行复制的完整攻击链条。同时,为防御方提供了从升级CPU卡、启用全扇区认证到部署多因子验证的系统性防护策略,旨在帮助管理员构建更稳固的物理安全防线。

weixin_29182481的博客 1401

Spring事务管理(详解+实例)

写这篇博客之前我首先读了《Spring in action》,之后在网上看了很多关于Spring事务管理的文章,具体参考文章如下: 1、将相应的接口依赖图理清出 2、将每个类的具体配置弄明白 3、将具体的配置给出来 4、给出具体的例子(一个声明式的一个编程式的)

Trigl的博客 9万+

Diffix3D+复现

上下载模型,将其放在一个目录中,并将目录名填在demo代码中from_pretrained的cache_dir参数里。目录结构应该是"<PATH>/nvidia/difix/…给的requirements文件中pytorch和xformers的版本没有指定,这里测试过以下版本,可以成功运行。将readme中的demo代码新建一个python脚本复制进去,然后将脚本放在src目录中运行。如果遇到网络问题无法加载huggingface上的预训练模型,可以手动从。如果出现,以下错误重新。

NeverMakeIt的博客 1085

【spring】---spring的事务管理

这里写目录标题一.前言说明二.spring事务处理机制2.1 事务的分类2.2 编程式事务--TransactionTemplate2.3 声明式事务—基于XML配置2.3 声明式事务—基于@Transactional注解配置三.spring事务---@Transactional注解3.1 Transactional注解属性元素3.2 事务隔离级别3.3 事务传播行为3.4 事务超时3.5 事务只读属性3.6 事务回滚机制四.spring事务业务场景分析4.1 Transactional注解失效场景 一.前

寻梦友的博客 795

可信数据空间:可信空间、区域功能节点、业务功能节点、连接器的关联关系

可信数据空间通过分层架构实现安全数据共享:可信空间作为顶层制定全局规则;区域功能节点协调辖区内功能节点协作;功能节点提供具体数据服务;连接器作为唯一通信通道确保安全交互。系统采用"规则自上而下约束,数据自下而上流动"机制,通过分层治理和标准化连接,在保证数据主权的同时实现跨域协作,具有策略分级执行、去中心化治理等特性,支持灵活扩展业务场景。

友莘居士的博客 1684

2025年从零开始:构建你的首个ComfyUI工作流-ComfyUI入门教程

然而,由于它拥有众多的插件节点,以及较为复杂的操作流程,学习起来相对困难。以前面搭建的文生图工作流为例,首先点击功能区的【保存】,然后你的浏览器会出来一个弹窗,你可以进行文件命名,点击确定后浏览器会下载该文件,也就是带“json”后缀的文件,这样我们的工作流就打包成一份文件了。思考一下前面说的,节点是不是需要下载安装才能使用,而我们复用别人的工作流,他用的节点你不一定下载了,因为目前有600多个节点,你不可能全部下载了吧,所以我们日后使用别人的工作流,你会经常出现这样的问题。

weixin_59486588的博客 1454

Spring是如何管理事务的

Spring 提供了两种事务管理方式:声明式和编程式。声明式事务管理是最常用的方式,它通过注解或 XML 配置来简化事务管理的操作。Spring 事务管理支持多种事务传播行为、隔离级别和回滚策略,能够帮助开发人员简化事务控制逻辑,同时确保数据的一致性和可靠性。

BRQ123的博客 2134

Vue3 与 Bpmn-js:打造现代化 BPMN 流程设计器

随着业务流程的复杂化,流程设计器成为企业级应用中不可或缺的一部分。BPMN(Business Process Model and Notation)是一种标准的业务流程建模语言,广泛应用于业务流程管理。本文将介绍如何使用 Vue3 和 Bpmn-js 打造一个现代化的 BPMN 流程设计器。

九天的专栏 2113

Spring之事务管理(涉及源码)

今天补充一下Spring里的事务管理,有源码分析环节哦

Nicer_feng's blog 865

ROS & ROS2 机器人深度相机激光雷达多传感器标定工具箱

不过,多传感器标定工具箱允许通过编辑 yaml 文件来调整标定目标的参数: <repository>/mutlisensor_calibration/cfg/TargetWithCirclesAndAruco.yaml%YAML:1.0rows: 4cols: 1dt: irows: 4cols: 2dt: frows: 1cols: 12dt: fCAD 模型网格/云通过 GICP 将模型数据与分割点云对齐,用于优化检测到的目标姿态。

2506_90492529的博客 2106

Spring AI 实战(11):收官!10 道面试高频题 + 一张脑图带走全系列

本文是Spring AI系列的收官篇,通过知识脑图梳理前10篇内容,提供面试高频题和避坑清单。主要内容包括: 知识脑图:分6层(核心抽象、输入增强、输出控制等)总结Spring AI全栈技术。 10道高频面试题:涵盖ChatClient/ChatModel关系、结构化输出、RAG链路等核心知识点。 避坑清单:列出9条常见问题及解决方案,如向量维度匹配、Advisor顺序等。 技术对比:分析Spring AI、LangChain4j和Spring AI Alibaba的差异与适用场景。 使用建议:提供面试复习

不才不才不不才的博客 295

Spring 事务机制

1. 引言 1.1 什么是事务 事务是由用户定义的一系列操作序列所组成的最小工作单元;这些操作要么全部完成,要么全部不完成,是一个不可分割的工作单元。常见于数据库中的并发控制和数据一致性处理场景。 1.2 事务的特性 事务具有以下特性: 原子性(Atomicity):事务是由操作序列组成的不可分割的最小工作单元。 一致性(Consistency):事务中操作的状态最终是一致的,要么全都完成,要么全都失败。 隔离性(Isolation):事务与事务之间的操作与状态是隔离开的,事务只受到自身操作状态的影响。

weixin_65837469的博客 1853

vue2/3 - [超详细] 实现企业微信扫码登录完整流程及代码,vue项目接入企业微信扫码登录功能教程,支持新跳页显示二维码或div容器里内嵌登录二维码(详细代码注释,一键复制开箱即用)

vue企业微信扫码登录,vue网页网站企业微信扫码登录教程,vue如何实现企业微信扫码登录功能,vue详细企业微信扫码登录功能实现,vue2实现企业微信扫码登录,前端vue企业微信扫码登录教程,vue pc电脑端企业微信扫码登录详细教程,vue项目中怎么做企业微信扫码注册登录,vue实现网站接入企业微信扫码登录,vue2做企业微信扫码登录的优质文章教程,vue网站对接企业微信扫码登录,vue企业微信扫码登录如何新开一页全屏显示登录二维码,vue企业微信登录二维码 内嵌在div容器里/跳页显示登录二维码,vu

✅ 精选推荐文章 5701

Spring 框架基础(05):事务管理机制,和实现方式

本文源码:GitHub·点这里 || GitEE·点这里 一、Spring事务管理好看的小说 www.shupu.org 1、基础描述 Spring事务管理的本质就是封装了数据库对事务支持的操作,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交和回滚。 Connection conn = DriverManager.getConnection...

爱无止 207

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java aoputils service多次开启事务_Spring 框架基础(05):事务管理机制,和实现方式...

一、Spring事务管理1、基础描述Spring事务管理的本质就是封装了数据库对事务支持的操作,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交和回滚。Connection conn = DriverManager.getConnection(); try { // 自动提交设置为false conn.setAutoCommit(f...

weixin_34544513的博客 249

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)

声明式事务管理 文章目录声明式事务管理基于XML方式的声明式事务基于Annotation方式的声明式事务 简单记录 - 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis) 和 Spring 3.0就这么简单 -Spring的事务管理 声明式事务管理 数据访问的技术很多,如JDBC、JPA、Hibernate、分布式事务等。面对众多的数据访问技术,Spr...

渐若窥宏大的博客 5029

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring框架学习笔记7-Spring事务管理

Spring事务管理 1Spring事务管理简介 Spring框架中事务管理有两种方式实现:编程式事务管理(try catch);aop技术实现的切面声明式; 对于事务管理一般使用aop的切面声明式。 aop的切面声明式两种操作实现: xml; 注解 2原理 事务管理不仅会对目标方法起作用,还会对有dml操作的切面方法起作用。 3数据库事务的特性 3.1什么是事务 一系列操作 3.2事务的作用 对数据库数据的一系列操作,要么全部成功,要么全部失败,防止中间状态的 出现,确保数据库中的数据始终处于正确的状态

White 376

Spring3核心技术之事务管理机制

文章转至http://zhou137520.iteye.com/blog/1675199 Spring对事务的解决办法其实分为2种:编程式实现事务,AOP配置声明式解决方案。  http://jinnianshilongnian.iteye.com/blog/1496953  Spring提供了许多内置事务管理器实现,常用的有以下几种:  DataSourceTransaction

edward0830ly的专栏 3万+

spring jpa 多数据源_Spring的事务机制

一、 Spring事务管理机制1.1 Spring框架的介绍Spring框架是开发人员使用的最流行的一个框架.1.2 Spring事务管理的优点提供统一的API接口支持不同的数据源Sring本身没有提供任何事务支持,只是对外提供统一的编程API接口,让数据源驱动方来对Spring事务进行实现,Spring事务的核心是PlatformTransactionManager接口.提供了声明式的事务管理S...

weixin_39613839的博客 402

spring的事务管理(配置文件方式和注解方式实现、转账环境搭建)

spring的事务管理(转账环境搭建) Spring的事务管理 事务概念 1 什么是事务 2 事务特性 3 不考虑隔离性产生读问题 4 解决读问题 (1)设置隔离级别 Spring事务管理api介绍 1 spring事务管理两种方式 第一种 编程式事务管理(不用) ...

zhupengqq的博客 222

Spring的事务管理和用法用例

Spring的事务管理 什么事务  事务:逻辑上的一组操作,组成这组操作的各个单元,要么全都成功,要么全都失败。 Spring的事务管理的API PlatformTransactionManager:平台事务管理器  平台事务管理器:接口,是Spring用于管理事务的真正的对象。  DataSourceTransactionManager :底层使用JDBC管理事务  HibernateTransactionManager :底层使用Hibernate管理事务 TransactionDefinit

qq_43171656的博客 196

spring事务管理

本节要点: 了解事务的概念 了解jdbc事务管理 掌握spring事务管理的实现方式 编程式事务管理 声明式事务管理 了解事务的隔离级别和传播方式 事务的定义: 数据库系统为了保证数据操作的完整性和一致性,引入了事务这个重要的概念,所谓事务,就是将一系列的数据库操作作为一个整体来执行。如对数据库存取,就是一组SQL指令,这一组SQL指令...

dianruanbin6930的博客 140

Spring事务管理学习笔记

1.      主要接口介绍 在Spring中,与事务相关的类或接口有以下三个: Ø  TransactionDefinition TransactionDefinition的作用是定义一个事务的属性,比如传播属性、隔离属性、超时属性等。 Ø  TransactionStatus TransactionStatus记录一个运行时的事务。 Ø  Platfor

Hooting的码农笔记本 1473

Spring事务管理机制深度解析:从JDBC基础到Spring高级实现

本文系统性地剖析了Java事务管理的完整技术栈,从基础的JDBC事务控制到Spring框架的高级事务管理机制。

qq_74092815的博客 1009

Spring框架探秘:IoC、AOP与事务管理的核心原理

摘要: Spring是一个分层的JavaEE生态系统,提供一站式解决方案,包含IoC容器、AOP、事务管理等核心技术及MVC、Data、Security等模块。IoC通过依赖注入(推荐构造器注入)实现控制反转,Bean生命周期含初始化/销毁回调。AOP通过切面管理横切关注点(如事务注解@Transactional)。配置方式从XML演进为JavaConfig与注解驱动,SpringBoot通过自动配置简化开发。最佳实践包括避免循环依赖、延迟加载,测试时使用@MockBean。趋势涵盖响应式编程(WebFlu

豆豆的博客 1498

Spring JDBC事务管理(声明式)

Spring 的声明式事务管理可以通过两种方式来实现,一种是基于 XML 的方式,另一种是基于Annotation注解的方式 一、基于xml文件的方式 基于XML方式的声明式事务是在配置文件中通过<tx:advice>元素配置事务规则来实现的。当配置了事务的增强处理后,就可以通过编写的AOP配置,让Spring自动对目标生成代理。配置<tx advice>元素时,通常需要指...

共勉 928
上一篇: Springmvc的全部知识详解(前后台传值,文件上传和下载,拦截器)
下一篇: Mybatis基础详解
变成秃头怪
博客等级 码龄5年 47粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值