SSM和SpringBoot框架的关系
SSM(Spring + Spring MVC + MyBatis)和 Spring Boot 是 Java 企业开发中常用的框架组合,但它们的定位、设计理念和适用场景有显著差异。以下从核心组成、架构设计、开发流程、配置方式等维度对比两者的区别,并结合实际场景说明如何选择。
一、核心组成与定位
维度 | SSM 框架 | Spring Boot 框架 |
---|---|---|
核心组成 | 由三个独立框架整合而成: - Spring(IOC/DI 容器) - Spring MVC(Web 层 MVC 框架) - MyBatis(ORM 框架) | 基于 Spring 生态的一站式开发框架,内置自动配置、Starter 依赖管理,可整合 MyBatis 等组件。 |
定位 | 传统的分层架构解决方案(MVC + ORM),需手动整合各模块。 | 简化 Spring 应用开发的脚手架工具,目标是“开箱即用”,降低配置复杂度。 |
二、架构设计与依赖管理
1. SSM:手动整合的“分层架构”
SSM 是经典的 MVC + ORM 分层架构,需开发者手动整合三个框架:
- Spring:负责 IOC 容器管理(Bean 生命周期、依赖注入)。
- Spring MVC:负责 Web 层请求分发、视图渲染(如处理
@Controller
、@RequestMapping
)。 - MyBatis:负责 ORM 映射(SQL 执行、结果集封装)。
依赖管理特点:
- 需手动管理三个框架的版本兼容性(如 Spring 5.x 需匹配 MyBatis 3.5.x 以上)。
- 需编写大量 XML 配置(如
spring-context.xml
、spring-mvc.xml
、mybatis-config.xml
)或 Java 配置类。
2. Spring Boot:自动配置的“一体化框架”
Spring Boot 是 Spring 生态的扩展工具集,通过以下机制简化开发:
- 自动配置(Auto-configuration):根据类路径中的依赖(如
mybatis-spring-boot-starter
),自动装配所需 Bean(如SqlSessionFactory
、DataSource
)。 - Starter 依赖:将常用功能的依赖打包为“Starter”(如
spring-boot-starter-web
包含 Spring MVC、Tomcat 等),避免手动选择版本。 - 内嵌容器:默认集成 Tomcat(或 Jetty、Undertow),无需额外部署 WAR 包。
依赖管理特点:
- 通过
spring-boot-dependencies
父 POM 统一管理所有依赖版本(如 Spring Boot 3.2.x 自动管理 MyBatis 3.5.x、HikariCP 5.0.x 等)。 - 仅需引入少量 Starter 即可完成核心功能集成(如
spring-boot-starter-web
+mybatis-spring-boot-starter
)。
三、开发流程对比
1. SSM:需手动配置的“繁琐流程”
以一个简单的用户查询接口为例,SSM 的开发流程需完成以下步骤:
- 创建 Maven 项目:手动添加 Spring、Spring MVC、MyBatis 及其依赖(需注意版本兼容)。
- 配置 Spring 容器:编写
applicationContext.xml
,配置数据源(如 JDBC)、事务管理器、MyBatis 的SqlSessionFactory
和MapperScannerConfigurer
。 - 配置 Spring MVC:编写
spring-mvc.xml
,配置DispatcherServlet
、视图解析器(如 JSP)、注解驱动(<mvc:annotation-driven/>
)。 - 编写业务代码:定义
User
实体类、UserMapper
接口(MyBatis Mapper)、UserService
(业务逻辑)、UserController
(Web 层)。 - 部署测试:需配置
web.xml
注册DispatcherServlet
和ContextLoaderListener
,打包为 WAR 部署到 Tomcat。
2. Spring Boot:自动装配的“极简流程”
同样以用户查询接口为例,Spring Boot 的开发流程大幅简化:
- 创建 Spring Boot 项目:通过 Spring Initializr 选择依赖(
Spring Web
+MyBatis Framework
),自动生成项目结构。 - 配置数据源:仅需在
application.yml
中配置数据库连接信息(无需手动配置SqlSessionFactory
):spring:datasource:url: jdbc:mysql://localhost:3306/user_dbusername: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver
- 编写业务代码:
- 实体类
User
(无需 XML 映射,可通过@Data
等 Lombok 注解简化)。 - Mapper 接口
UserMapper
(使用 MyBatis 注解或@MapperScan
扫描)。 - Service 层
UserService
(通过@Autowired
注入UserMapper
)。 - Controller 层
UserController
(通过@RestController
和@GetMapping
定义接口)。
- 实体类
- 运行测试:直接运行
main
方法(内置 Tomcat),访问http://localhost:8080/user/1
即可测试。
四、配置方式的差异
维度 | SSM | Spring Boot |
---|---|---|
配置文件 | 需编写多个 XML 或 Java 配置类(如 spring-context.xml 、spring-mvc.xml )。 | 仅需 application.properties 或 application.yml ,支持“约定优于配置”。 |
自定义配置 | 需显式覆盖默认配置(如通过 <bean> 标签自定义 DataSource )。 | 可通过 application.yml 覆盖自动配置的默认值(如修改数据源 URL)。 |
外部化配置 | 依赖 @Value 或 PropertyPlaceholderConfigurer 注入属性。 | 支持 @ConfigurationProperties 批量绑定配置(如将 spring.datasource.* 映射到 DataSourceProperties 对象)。 |
五、适用场景对比
场景 | SSM 更适合 | Spring Boot 更适合 |
---|---|---|
传统企业级项目 | 需精细控制框架配置(如自定义 Spring MVC 拦截器、MyBatis 插件)。 | 快速交付的中小型项目(如内部管理系统、API 服务)。 |
微服务架构 | 需手动整合服务治理(如注册中心、配置中心)。 | 结合 Spring Cloud 可快速构建微服务(自动集成 Eureka、Feign 等)。 |
学习成本 | 需掌握三个框架的底层原理(如 Spring 的 IOC、Spring MVC 的请求分发)。 | 降低入门门槛(自动配置隐藏底层细节,聚焦业务逻辑)。 |
依赖管理 | 需手动解决版本冲突(如 Spring 4.x 与 MyBatis 3.4.x 兼容)。 | 父依赖统一管理版本,避免冲突(“一次版本,到处运行”)。 |
六、总结
SSM 是传统的“分层架构组合”,强调灵活性和可控性,适合需要精细配置的场景;Spring Boot 是“一站式开发框架”,强调简化配置和快速交付,适合现代企业级应用的快速开发。
一句话总结:SSM 是“手动拼装的汽车”,需要开发者熟悉每个零件的组装;Spring Boot 是“出厂即用的汽车”,开发者只需关注“如何驾驶”(业务逻辑)。