看了那么多SSM整合,这一篇真的很用心。

news2024/11/6 7:31:23

1.邂逅 SSM

前言

记得大二上学期老师第一次讲 SSM 整合的时候,自己竟然浑浑噩噩睡过去了。

平时上课不好好听讲,后来听说期末要交大作业了,只能被迫去网上自学。

不对。。。少打个S,不过这真的是我第一次搜 SSM 的资料,当时室友还说我变态。

不过从那天起我带着尴尬的表情和搞定期末大作业的决心把 SSM 框架的整合认真研究了一遍。

SSM 框架

SSM 框架 是 Spring、SpringMVC、MyBatis 的缩写,这三个框架整合起来适用于搭建各种大型的企业级应用系统。

这个是继 SSH 框架之后,应用比较广泛的 Java EE 企业级框架。

不过 2022 年了,我觉得这句话应该改改了,因为目前主流的企业级开发都是基于 SpringBoot 框架。

而 SSM 框架的整合目前更适合程序小白去做学习研究以及计算机专业大四生去做毕业设计。

2.如何整合 SSM

1.框架之间的关系

我们在整合 SSM 之前,先看一下这些框架之间的关系。

Spring 和 SpringMVC

Spring 和 SpringMVC 都是用来管理对象的容器

SpringMVC 主要用来管理 Controller ,Spring 主要用来管理 Service 和 Dao 以及其他对象。

所以我们在 SpringMVC 的配置文件里配置的注解扫描路径就是 Controller的路径,而 Spring 的配置文件配置的注解扫描路径会排除 Controller。

Spring 和 SpringMVC 是父子容器的关系。Spring 容器是父容器,SpringMVC 是子容器。

子容器可以访问父容器的对象,但是在父容器里不能访问子容器的对象。也就是说在 Controller 里可以访问 Service 对象,但是在 service 里不可以访问 Controller 对象。

SpringMVC 是 Spring 的子项目,属于 Spring 家族的一部分。所以在潜意识里,你可以认为他俩几乎是黏在一起的。

所以他俩基本是无缝整合的,说白了就是他俩不需要整合。

Spring 和 Mybatis

MyBatis 是一个基于 java 的持久层框架,它内部封装了 jdbc。它和 Spring 看起来好像没啥关系。

但是 Mybatis 开发过程中有很多痛点

1.配置繁琐,我们需要配置实体类的别名、映射文件所在位置、数据源等。

2.创建 Mapper 麻烦。

3.Mybatis 接口调用比较繁琐:

// 1.读取配置文件
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
// 2.创建 SqlSessionFactory 工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
// 3.获取 SqlSession 对象
SqlSession session = factory.openSession();
// 4.使用 SqlSession 创建 Dao 接口的代理对象
UserDao userDao = session.getMapper(UserDao.class);
// 5.执行接口的方法
List<User> userList = userDao.getAll();
复制代码

但是 Spring 可以帮助 Mybatis 解决这些痛点:

1.DataSource 可以作为 Spring 的一个 bean

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
  <property name="driverClassName" value="${jdbc.driver}"></property>
  <property name="url" value="${jdbc.url}"></property>
  <property name="username" value="${jdbc.username}"></property>
  <property name="password" value="${jdbc.password}"></property>
</bean>
复制代码

2.Spring 也可以管理 SqlSessionFactory 对象、设置实体类别名、管理 mapper 文件。

<!-- 管理mybatis操作数据库的会话对象SqlSession -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 设置数据源 -->
    <property name="dataSource" ref="dataSource"></property>
    <!-- 设置类型别名 -->
    <property name="typeAliasesPackage" value="com.zhifou.model"></property>
    <!-- 设置映射文件的路径 -->
    <property name="mapperLocations" value="classpath:/mapper/*.xml"></property>
</bean>
复制代码

3.利用 Spring 的动态代理技术自动创建 Dao 接口的代理对象:

<!-- 在所设置的包下,将所有的接口生成动态代理实现类,并由spring容器管理 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.zhifou.dao"></property>
</bean>
复制代码

2. 整合思路

表面看是 SSM 整合,实际上是 Spring 和 Mybatis 的整合。

因为 Spring 和 SpringMVC 无缝整合,所以 SpringMVC 的配置基本不用动。

但是我们需要注意一点:

Spring 是用来管理对象的工厂,我们需要保证这个工厂只被创建一次。所以需要在 web.xml 配置 Spring 的监听器。当 Tomcat 一启动,自动初始化 Spring 的 IOC 容器,创建 Spring 的工厂。

3. 整合流程

我们先配置 SpringMVC:

1.创建 SpringMVC 的配置文件,配置注解扫描 controller、访问静态资源、视图解析器。

2.web.xml 配置中央调度器、字符过滤器

再整合 Spring 和 Mybatis

3.创建 spring 的配置文件,配置注解扫描排除 controller。

4.配置数据源

5.配置 SqlSessionFactoryBean

6.配置管理自动生成的 Dao 层的代理对象

7.配置事务管理

最后我们再配置 Spring 的监听器,启动项目自动初始化 Spring 容器。

8.在 web.xml 配置 Spring 的监听器。

3.基于配置文件方式整合 SSM

这里我先讲一下基于配置文件的方式整合 SSM。

1.创建基于 Maven 的 web 项目

2.引入依赖

<dependencies>
  <!-- 包含 beans、core、expression、aop 等依赖-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.2.16.RELEASE</version>
  </dependency>
  <!--  自动加载 Spring 工厂、支持文件上传等-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.2.16.RELEASE</version>
  </dependency>
  <!-- 封装 jdbc 、包含 spring-tx 事务管理依赖-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.16.RELEASE</version>
  </dependency>
  <!-- 动态代理 -->
  <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.9.5</version>
  </dependency>
  <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.9.5</version>
  </dependency>
  <!-- springmvc 核心依赖 -->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.8.RELEASE</version>
  </dependency>
  <!-- mybatis -->
  <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.5</version>
  </dependency>
  <!-- mybatis-spring 整合依赖 -->
  <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>2.0.5</version>
  </dependency>
  <!-- mysql 驱动 -->
  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
  </dependency>
  <!-- 数据库连接池 -->
  <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.21</version>
  </dependency>
  <!-- servlet -->
  <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
  </dependency>
  <!-- json 格式转换-->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.13.2</version>
  </dependency>
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.2</version>
  </dependency>
</dependencies>
复制代码

这里讲解一下部分引入的依赖:

(1)spring-context 包含 Spring 的所有核心依赖,所以只需要引入这一个即可。

(2)spring-jdbc 依赖包含 Spring 对 jdbc 的封装、事务的处理。

(3)mybatis-spring 是 mybatis、spring 整合需要的依赖 。

(4)jackson 相关的依赖是用来处理 json 格式的数据。

3.创建 SpringMVC 的配置文件,配置注解扫描 controller、访问静态资源、视图解析器。

4.web.xml 配置中央调度器、字符过滤器。

5.创建 spring 的配置文件,配置注解扫描排除 controller。

6.配置数据源

这里我们通过引入外部文件的方式配置数据源。

7.配置 SqlSessionFactoryBean

8.配置管理自动生成的 Dao 层的代理对象

9.配置事务管理

10.在 web.xml 配置 Spring 的监听器。

11.配置 Tomcat 并测试

成功!撒花!

12.完整代码

链接: https://pan.baidu.com/s/1lT9GjWCto-Cc0W4fm0KtGw 
提取码: ocj9 
复制代码

4.纯注解方式整合 SSM

这里我们讲一下基于纯注解的方式整合 SSM,创建项目和引入依赖的过程这里不再过多讲解, Maven 依赖和上面一样。

1.创建 SpringMVC 的配置类,配置注解扫描 controller、中央调度器、访问静态资源、视图解析器。

@EnableWebMvc:开启 MVC 的配置。

2.创建 DataSource 的配置类。

@PropertySource:表示引入外部文件资源。

@Value:表示为变量赋值。

3.创建 Spring 的配置类。

导入 DataSource 的配置类。配置sqlSessionFactoryBean、DAO 的代理对象、事务管理

@Import:导入整合其他配置类

@EnableTransactionManagement:开启事务管理。

4.创建替代 web.xml 的配置类

这个配置类就相当于 web.xml 的功能,当 Tomcat 启动的时候自动加载 Spring 和 SpringMVC 的配置类,初始化容器。

5.测试

成功!撒花!

6.完整代码

链接: https://pan.baidu.com/s/1LeRGaRTz7hpjJ9aHiOfZFg 
提取码: tc2k 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华新环保深交所上市:市值49亿 前9个月净利降幅近30%

雷递网 雷建平 12月16日华新绿源环保股份有限公司&#xff08;简称&#xff1a;“华新环保”&#xff0c;证券代码&#xff1a;301265&#xff09;今日在深交所上市。华新环保本次发行股票7575万股&#xff0c;发行价13.28元&#xff0c;募资10.06亿元。华新环保开盘价为16元&a…

爬虫应用场景的利弊分析

相信大家在春节的时候都有过抢火车票的经历&#xff0c;对一些抢票软件一定不会感到陌生。今天我们就来从技术的角度&#xff0c;来看看抢票软件背后的东西——爬虫。通俗点说&#xff0c;爬虫就是模拟人的行为去各个网站溜达&#xff0c;并把看到的信息背回来的探测机器。如今…

Swagger是什么?Swagger怎么用?

Swagger 是一个规范且完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口&#xff0c;可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 S…

(直连主题扇形)交换机

目录 一、交换机简介 1. Exchange&#xff08;交换机&#xff09;的作用 2.Exchange&#xff08;交换机&#xff09;的类型 ①.直连交换机&#xff1a;Direct Exchange ② 主题交换机&#xff1a;Topic Exchange ③ 扇形交换机&#xff1a;Fanout Exchange ④ 首部交换机…

NMS与Soft NMS算法解析与numpy实现

1. NMS算法 1.1 什么是NMS算法 NMS全称为Non Maximum Suppression&#xff0c;中文意思是非极大值抑制&#xff0c;字面意思就是不是极大值的元素被抑制掉&#xff0c;其实就是筛选出局部最大值得到最优解。NMS算法被广泛运用于目标检测算法处理网络输出的边界框。 1.2 为什…

【HTML基础篇002】HTML之form表单超详解

文章目录 &#x1f304;一、form表单是什么 &#x1f304;二、form表单的属性 &#x1f304;三、input中的各种Type属性值 &#x1f304;四、标签 &#x1f304;一、form表单是什么 表单是一个包含表单元素的区域。表单用于向服务器传输数据&#xff0c;从而实现用户与Web服…

jsp+ssm计算机毕业设计潮流服饰网店平台【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

第十四届蓝桥杯集训——if——配套用法示例

第十四届蓝桥杯集训——if——配套用法示例 目录 第十四届蓝桥杯集训——if——配套用法示例 方法1 方法2 其它指数幂 输入一个数n&#xff0c;判断n是否是2的指数。 n的取值范围(0>n<)​​​​ 题目看着很简单&#xff0c;其实在比较小的数上还是挺容易做的&…

CARIS11.4基本使用流程及其bug解决

今天博主介绍一下CARIS11.4的基本流程以及它的界面bug。 一、CARIS11.4的基本流程 如果以前用过CARIS9&#xff0c;不用看帮助说明&#xff0c;你摸索一段时间也能掌握CARIS11.4的使用流程。相比CARIS9&#xff0c;CARIS11.4的主要功能基本不变&#xff0c;增加了生成变分辨率…

毕业设计 - java web 进销存管理系统的设计与实现【源码+论文】

文章目录前言一、项目设计1. 模块设计系统需要具备以下功能2. 实现效果二、部分源码项目源码前言 今天学长向大家分享一个 java web 项目: 进销存管理系统的设计与实现 一、项目设计 1. 模块设计 系统需要具备以下功能 ⑴一般企业人员的计算机知识掌握的不多&#xff0c;因…

Android studio profiler中的Shallow size和retained sizes是什么意思

这个文章说得非常好&#xff1a;https://www.yourkit.com/docs/java/help/sizes.jsp#:~:textYourKit%20Java%20Profiler%20is%20capable%20of%20measuring%20shallow,the%20number%20and%20types%20of%20%20its%20fields. Shallow size&#xff1a;用于存储一个对象的内存大小…

【Python机器学习】聚类算法任务,评价指标SC、DBI、ZQ等系数详解和实战演示(附源码 图文解释)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、聚类任务 设样本集S{x_1,x_2,…,x_m}包含m个未标记样本&#xff0c;样本x_i(x_i^(1),x_i^(2),…,x_i^(n))是一个n维特征向量。 聚类在分簇过程的任务是建立簇结构&#xff0c;即要将S划分为k&#xff08;有的聚类算法…

你不知道的 Git 技巧:如何实现核心代码保护

大家好&#xff0c;我是 shixin。 前段时间完成了一个核心代码保护的功能&#xff0c;目标是在关键代码被修改及时同步给其他人&#xff0c;避免没经过 review 就上线导致问题&#xff0c;提示的效果图如下&#xff1a; 在实现的过程中&#xff0c;用到一些平时使用不多的 Git…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.8 查询Redis 缓存

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.8 查询Redis 缓存48.8.1 OpenResty的Redis模块48 多级缓存 48.8 查询Redis 缓存 48.8…

spring切入点函数

切入点函数&#xff1a;用于执行切入点函数 1.execution 1.最为重要的切入点函数&#xff0c;功能最全 2.可以执行方法切入点表达式&#xff0c;可以执行类切入点表达式&#xff0c;可以执行包切入点表达式 弊端&#xff1a;书写比较麻烦 2.args 1.作用&#xff1a;主要用…

原创10个python自动化化案例,一口一个高效办公!

以下为我的自动化办公代码&#xff0c;有需要的同学建议点赞收藏并熟读背诵&#xff01;&#xff08;持续更新&#xff09; 1.自动化批量调整word中含有关键词句子的样式 就随便拿一段我在网上找到的文字来做例子&#xff1a; 若关键词为“资金”&#xff0c;则处理后的word…

CentOS不再维护,跃跃欲试AlmaLinux

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61…

CSS基础总结(三)盒子模型

文章目录 一、概述 二、组成 1. 边框&#xff08;border&#xff09; 2.内边距&#xff08;padding&#xff09; 3.外边距&#xff08;margin&#xff09; 三、阴影 1.盒子阴影 2.文字阴影 四、综合案例 1.新浪导航栏 2.京东商品模块 一、概述 所谓 盒子模型&#xff1a…

Kubernetes自定义监控指标——Prometheus Adapter实战演练

1、概述 kubernetes的监控指标分为两种&#xff1a; Core metrics(核心指标)&#xff1a;从 Kubelet、cAdvisor 等获取度量数据&#xff0c;再由metrics-server提供给 kube-scheduler、HPA、 控制器等使用。 Custom Metrics(自定义指标)&#xff1a;由Prometheus Adapter提供…

小伙伴们-GO-带你揭开Linux的神秘面纱

文章目录1、Linux的神秘面纱2、Linux操作系统优秀特质3、Linux操作系统应用领域4、解刨-linux系统结构5、带你一探Linux系统-满血复活的启动过程6、Linux 骨架-文件系统与目录结构6.1、Linux 文件系统概览6.2 、linux/unix 文件系统-奠基石6.2.1、 硬盘存储小知识6.2.2、 inode…