【SSM】篇三:Spring事务和SpringMVC入门案例
创始人
2024-06-03 12:37:30
0

文章目录

  • 1、Spring事务
    • 1.1 Spring事务简介
    • 1.2 Spring事务角色
    • 1.3 Spring事务配置
  • 2、SpringMVC
    • 2.1 SpringMVC简介
    • 2.2 SpringMVC入门案例
    • 2.3 bean加载控制

1、Spring事务

1.1 Spring事务简介

  • 事务的作用:在数据层保障一系列的数据库操作同时成功或者同时失败
  • Spring事务作用:在数据层或业务层保障一系列的数据库操作同时成功或者同时失败

Spring中的相关接口和实现类:

在这里插入图片描述

案例:模拟银行账户间转账业务

需求:实现任意两个账户间转账
在这里插入图片描述
库表:t_act
在这里插入图片描述
业务层和数据层接口:
在这里插入图片描述
在这里插入图片描述
业务层实现类:
在这里插入图片描述

未开启事务的情况下,模拟转账异常(使用10/0),测试:
在这里插入图片描述

出现丢钱的情况:
在这里插入图片描述

STEP1:在业务层接口添加Spring事务管理

@Transactional
public interface AccountService{public void transfer(String out,String in,Double money);}
  • Spring注解式事务通常添加在业务层接口中,而不会添加到业务层实现类中,降低耦合
  • 注解式事务可以添加到某个方法上,表示当前方法开启事务,也可添加到接口上,表示接口中的所有方法开启事务

STEP2:设置平台事务管理器

在这里插入图片描述

STEP3:开启注解式事务驱动

在Spring配置类SpringConfig.class中加入:

@EnableTransactionManagement

1.2 Spring事务角色

  • 事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法
  • 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法

未加入Spring事务之前:
在这里插入图片描述
加入@Transactional

在这里插入图片描述
在这里插入图片描述

1.3 Spring事务配置

有些异常默认不参与回滚,需要手动加,比如IOException:

在这里插入图片描述
由于IOException默认不参加回滚,此时即使开启Spring事务,也会丢钱。需手动在rollbackfor属性加一下:
在这里插入图片描述

其余属性:

在这里插入图片描述

案例--转账业务追加日志

在这里插入图片描述

代码实现:

定义数据层和业务层:
在这里插入图片描述
在这里插入图片描述
业务层实现类:
在这里插入图片描述
为实现"不论转账是否成功,均有日志留痕",将日志语句放在finally中:
在这里插入图片描述
运行后发现,发生异常后,日志并未写入

原因分析:
事务管理员和事务协调当前是一个整体,
在这里插入图片描述

而我需要日志记录是另一个单独的事务。这样,上面的账户事务回滚的时候,日志事务不回滚

在这里插入图片描述

事务的传播行为:

事务协调员对事务管理员所携带事务的处理态度,即你开启事务了,我是加入呢?不加入呢?还是自己开一个事务呢。通过在Transactional注解的Propagation属性进行说明。

各个取值含义:
在这里插入图片描述
在这里插入图片描述
此时,发生异常,log数据表中正常记录:

在这里插入图片描述

2、SpringMVC

2.1 SpringMVC简介

SpringMVC技术和Servlet技术功能等同,均属于web层开发技术,是一种基于JAVA的轻量级Web框架。

在这里插入图片描述
使用Servlet:
在这里插入图片描述
使用SpringMVC:
在这里插入图片描述

2.2 SpringMVC入门案例

步骤:

STEP1:导入SpringMVC坐标与Servlet坐标

在这里插入图片描述

STEP2:创建SpringMVC控制器类(等同于Servlet功能)

在这里插入图片描述

STEP3:初始化SpringMVC环境

这里和Spring一样,写配置类,加载对应的bean

在这里插入图片描述

STEP4:告诉TomCat加载SpringMVC环境

初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求

在这里插入图片描述

相关注解:

- 名称:@Controller
- 类型:类注解
- 位置:SpringMVC控制器类定义的上方
- 作用:设定SpringMVC核心控制器bean@Controller
public class UserController{}
- 名称:@RequestMapping
- 类型:方法注解
- 位置:SpringMVC控制器方法定义的上方
- 作用:设定当前控制器方法的访问路径@Controller
public class UserController{@RequestMapping("/save")public void save(){System.out.println("save ...");}}
- 名称:@ResponseBody
- 类型:方法注解
- 位置:SpringMVC控制器方法定义的上方
- 作用:设定当前控制器方法响应内容为当前返回值,无需解析@Controller
public class UserController{@RequestMapping("/save")@ResponseBodypublic String save(){System.out.println("save ...");return "{'code':'9527'}";}}

代码实现:

在这里插入图片描述

控制器类:

package com.llg.controller;import ... @Controller
public class UserController {/*** RequestMapping注解设置当前操作的访问路径* ResponseBody注解设置当前操作的返回值类型* @return*/@RequestMapping("/save")@ResponseBodypublic String save(){System.out.println("User save ...");return "{'module':'SpringMVC'}";}@RequestMapping("/code")@ResponseBodypublic String code(){System.out.println("code ...");return "{'code':'9527'}";}
}

写配置类,加载bean:

package com.llg.config;import ...@Configuration
@ComponentScan("com.llg.controller")
public class SpringMvcConfig {
}

初始化Servlet容器,加载SpringMVC环境:

package com.llg.config;import .../*** 定义servlet容器启动配置类,在里面加载Spring的配置* @author LLG* @date 2023/3/13*/
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {/*** 加载SpringMVC容器配置的* @return*/@Overrideprotected WebApplicationContext createServletApplicationContext() {AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();ctx.register(SpringMvcConfig.class);return ctx;}/*** 设置哪些请求归属SpringMVC处理* /表示拦截所有请求,任意请求都转入到SpringMVC处理* @return*/@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}/*** 加载Spring容器的配置* @return*/@Overrideprotected WebApplicationContext createRootApplicationContext() {return null;}
}

pom文件中加入tomcat插件:

org.apache.tomcat.maventomcat7-maven-plugin2.2                / 9090UTF-8

在这里插入图片描述

工作流程分析:

在这里插入图片描述

2.3 bean加载控制

功能不同,如何避免Spring加载bean的时候错误的加载到SpringMVC的bean—加载Spring控制的bean的时候排除掉SpringMVC控制的bean

在这里插入图片描述
具体实现:
在这里插入图片描述
在这里插入图片描述
此时getBean就拿不到UserController类的bean了:
在这里插入图片描述

相关注解–@ComponentScan

  • 名称:@ComponentScan
  • 类型:类注解
  • 属性:
    excludeFilters:排除扫描路径中加载的bean,需要指定类别type和具体项classes
    includeFilters:加载指定的bean,需要指定类别type和具体项classes

SpringMVC和Spring加载对应的bean:
在这里插入图片描述
在此基础上,做一个简化,去继承另一个类:
在这里插入图片描述

相关内容

热门资讯

四川高考作文【精选5篇】 四川高考作文 篇一:探索自我,实现梦想高考作文题目:探索自我,实现梦想作文要求:请以“探索自我,实现...
高考复读学校招生模板范文(优... 高考复读学校招生模板范文 篇一:提升学业水平,实现梦想的机会尊敬的家长和考生:您好!感谢您对我们学校...
高考语文万能作文素材(优质6... 高考语文万能作文素材 篇一第一篇内容:文学与人生文学是人类的精神财富,是人类智慧的结晶。它以文字为媒...
高考作文预测与:兑现承诺(通... 高考作文预测与:兑现承诺 篇一在高考备考期间,很多学生会参加各种辅导班和模拟考试,以提高自己的成绩。...
高考满分作文(实用6篇) 高考满分作文篇一:重拾初心,追寻梦想高考,是每个学生人生中的一次大考,也是人生道路上的一个重要转折点...
高考满分作文勇气范文【推荐6... 高考满分作文勇气范文 篇一标题:勇往直前,迎接挑战勇气是一种伟大的品质,它可以使我们面对困难和挑战时...
全国一卷高考优秀作文【优秀6... 全国一卷高考优秀作文 篇一:领导力的重要性在现代社会中,领导力被广泛认为是一种重要的能力。无论是在学...
高考作文案例“以自己的方式改... 高考作文案例“以自己的方式改变世界” 篇一第一篇内容:我与他人的互动当我们谈到改变世界时,很多人会想...
盘点高考中不得不看的奇人异事... 盘点高考中不得不看的奇人异事 篇一在高考这个重要的考试中,总会出现一些令人难以置信的奇人异事。这些事...
体育精神高考范文素材(最新6... 体育精神高考范文素材 篇一体育精神是高考中的重要素质高考作为一个重要的人生关卡,不仅仅考察学生的学术...
11年高考作文(优秀6篇) 11年高考作文 篇一标题:互联网对青少年的影响互联网在当今社会已经成为了青少年生活中不可或缺的一部分...
作文高考范文以及题目大全(精... 作文高考范文以及题目大全 篇一标题:我的高中生活字数:600字高中生活是人生中非常重要的一个阶段,它...
高考作文范文【推荐6篇】 高考作文范文 篇一:《高考改革与教育公平》高考作文范文 篇二:《高考改革与素质教育》高考作文范文 篇...
高考作文题目预测:用心创造快... 高考作文题目预测:用心创造快乐 篇一快乐是一种心态,也是一种态度。在现代社会中,人们往往忽视了用心创...
广东高考英语作文题目【经典3... 广东高考英语作文题目 篇一Title: The Importance of Time Managem...
全国及11个省市高考作文题目... 全国及11个省市高考作文题目 篇一题目:如何适应高考改革的新形势近年来,高考改革取得了显著的进展,不...
高考议论文(经典6篇) 高考议论文 篇一:高考制度是否应该改革高考是中国教育体系中的重要组成部分,对于每一个学生来说都至关重...
关于2021高考作文范文【优... 关于2021高考作文范文 篇一2021高考作文范文:努力奋斗的力量在2021年的高考作文中,我选择了...
云南高考理科状元:成绩出乎意... 云南高考理科状元:成绩出乎意料 篇一近日,云南省高考理科状元的成绩出乎意料地引起了广泛关注。这位学生...
网络安全作文高考范文5篇(推... 网络安全作文高考范文5篇篇一:网络安全的重要性网络安全已经成为当今社会中一个非常重要的问题。随着互联...