什么是SSM ?
SSM是轻量级 Java Web 开发组合,是国内培训班、老项目最经典的技术栈,用来做后台接口、管理系统。
1. Spring(核心容器)
最底层,是整个 SSM 的总管。 核心能力:IOC 控制反转、AOP 面向切面
- IOC:帮你自动创建对象、管理对象依赖(不用自己 new 对象)
- AOP:做日志、事务、权限、统一异常(比如方法执行前后自动记录日志)
- 提供事务管理(数据库要么全部成功,要么全部回滚)
2. SpringMVC(负责 Web 层,接收前端请求)
Spring 的子模块,专门处理 HTTP 请求,属于 MVC 架构里的MVC 的 C(Controller 控制器)流程: 前端发请求 → SpringMVC 接收 → 找到对应的 Controller 方法 → 调用业务 → 返回数据(json / 页面)
作用:对接前端,路由、参数接收、返回响应
3. MyBatis(持久层框架,操作数据库)
替代原生 JDBC,用来写 SQL、和 MySQL/Oracle 打交道。 特点:
- SQL 写在 xml 或者注解里,SQL 由开发自己写(对比 Hibernate 全自动 ORM)
- 灵活、好优化 SQL,国内企业非常爱用
✅ SSM 完整分层流程(MVC)
- 前端(浏览器 / APP)发 http 请求
- SpringMVC(Controller 控制层):接收参数、校验、调用业务
- Spring(Service 业务层):写业务逻辑、事务控制
- MyBatis(Mapper/DAO 数据访问层):执行 SQL,读写数据库
实体类:POJO/Entity,对应数据库表(Model 模型)
前端 → SpringMVC(Controller) → Service → Mapper(MyBatis) → MySQL现在新项目大多用SpringBoot(内置了 Spring+SpringMVC) + MyBatis/MyBatis-Plus,是 SSM 的简化升级版,SSM 偏传统老项目
Spring Boot 和Spring Cloud是啥?区别是啥?
- Spring Boot:快速开发单体微服务(一个独立服务),是开发单个服务的脚手架,简化 Spring、SSM 配置。
- Spring Cloud:一套微服务治理全家桶,用来把很多个 Spring Boot 服务组织在一起、互相配合。
简单类比:
Spring Boot = 造一辆单独的小汽车(一个服务)
Spring Cloud = 高速路网 + 红绿灯 + 调度中心,管理一大堆小汽车(一堆服务)
Spring Boot 是什么
Spring Boot 不是新框架,底层就是Spring + SpringMVC,是 SSM 的升级简化版。 核心目标:消灭繁琐 XML 配置、自动装配、开箱即用。
核心特点:
- 自动配置:根据引入的依赖,自动帮你配好 Spring、连接池、MVC 等,不用写大量 xml
- 内置 Tomcat(或者 Jetty):打包成 jar 包,
java -jar直接跑,不用单独部署 tomcat 服务器 - 起步依赖 starter:比如
spring-boot-starter-web一键引入 web 需要的所有包;starter-mybatis整合 mybatis - 适合:单体项目、单个独立微服务接口
👉 可以只用 Spring Boot,不碰 Spring Cloud。 比如:一个后台管理系统,所有业务都在这一个服务里,这就是单体 SpringBoot 项目。
和 SSM 对比:
SSM:需要自己写大量 xml 配置、配 Tomcat、管理依赖版本
SpringBoot:自动配置、内置 web 容器、starter 管理依赖
Spring Cloud 是什么
Spring Cloud不是一个框架,是一套规范 + 一堆组件集合,专门解决【很多个服务分开部署之后带来的一堆问题】。 前提:里面每一个微服务,基本都是用 Spring Boot 写的。
当项目拆成很多独立服务之后,会遇到这些问题,Spring Cloud 组件就是用来解决它们:
- 服务注册发现:A 服务怎么找到 B 服务(Nacos / Eureka)
- 服务调用:服务之间怎么远程调用(OpenFeign)
- 熔断限流:某个服务崩了,不能拖垮整个系统(Sentinel / Hystrix)
- 网关:统一入口,鉴权、路由(Gateway)
- 配置中心:所有服务统一管理配置文件(Nacos / Config)
- 分布式事务、链路追踪、负载均衡 等
✅ 一句话:Spring Cloud 负责分布式微服务之间的协作、治理。
注意:Spring Cloud 本身不写业务代码!业务代码写在一个个 Spring Boot 项目里。
清晰对比表
| 项目 | Spring Boot | Spring Cloud |
|---|---|---|
| 定位 | 快速构建单个 Spring 应用 | 微服务治理框架集,管理一堆服务 |
| 依赖关系 | 独立,可以单独使用 | 依赖 Spring Boot,不能脱离它单独写业务 |
| 解决问题 | 简化 Spring 开发、简化配置、一键启动 | 分布式场景:服务发现、调用、熔断、网关、配置中心 |
| 部署形态 | 一个 jar,是一个服务 | 多个 SpringBoot 服务 + 注册中心、网关等组件一起组成集群 |
| 适用场景 | 单体项目、单个微服务 | 大型分布式、微服务架构 |
Java EE(规范) ↓ Spring(核心IOC/AOP) + SpringMVC(web层) + MyBatis → SSM(老的单体) ↓ SpringBoot = Spring + SpringMVC + 自动配置(新一代单体/单个微服务) ↓ SpringCloud:把一堆SpringBoot服务管理起来,做成分布式微服务集群这里解释2个误区:
❌ 误区:SpringCloud 替代 SpringBoot
✅ 真相:SpringCloud 是基于 SpringBoot 的配套工具集,两者是搭档,不是替代关系
❌ 误区:用了 SpringBoot 就是微服务
✅ 真相:SpringBoot 可以写单体,也可以写微服务;微服务是架构思想,SpringCloud 才是微服务治理工具
以前Spring Cloud Netflix(很多组件停更了) ,现在国内主流的微服务框架是:
Spring Cloud Alibaba(Nacos、Sentinel、Dubbo,国内企业用得极多)
MyBatis-Plus(简称 MP)
是MyBatis 的增强工具,只增强、不改原 MyBatis,专门帮忙省去单表增删改查重复 SQL,和 SpringBoot 搭配是现在国内后端标配Baomidou™。
不是替代 MyBatis!底层依然是 MyBatis。复杂多表关联、复杂 SQL,照样可以继续写 xml,和以前一样。
核心能干啥
1、BaseMapper 自带全套单表 CRUD你的 Mapper 继承BaseMapper<User>,直接自带:根据 id 查、新增、修改、删除、批量查询,单表不用写一句 SQL、不用写 xmlMyBatis-Pl...。
// 就这一行,单表基础操作全部有 public interface UserMapper extends BaseMapper<User>{}2、条件构造器 Wrapper(QueryWrapper / LambdaQueryWrapper)用 Java 链式代码拼查询条件,不用在 xml 里写一堆<if>动态 SQL,Lambda 写法还能防止字段名写错。
// 示例:名字like、年龄大于18 LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery(); wrapper.like(User::getName,"张").gt(User::getAge,18); List<User> list = userMapper.selectList(wrapper);3、自带常用插件,开箱即用
- 分页插件:物理分页,自动算总数,不用自己写 limit
- 逻辑删除:不是真 delete,给字段打删除标记(is_deleted)
- 自动填充:创建时间、更新时间自动赋值
- 乐观锁:版本号控制并发更新
- 主键策略:雪花 ID、自增等,分布式场景友好
4、代码生成器
一键生成 Entity、Mapper、Service、Controller,新建表之后直接一套代码生成,超级省时间。
对比MyBatis和MyBatis-Plus
- MyBatis:半自动,SQL 自己写,灵活,但是单表 CRUD 重复代码多
- MyBatis-Plus:MyBatis 外挂,单表自动生成 SQL;复杂 SQL 依然交给原生 MyBatis 写 xml
简单类比:
MyBatis = 手动挡车,SQL 你自己写,完全可控;
MyBatis-Plus = 给手动挡加了自动巡航,常规操作自动跑,遇到复杂路况你随时切回手动写 SQL。
知识总结:
SSM 时代:SpringMVC + Service + Mapper +原生 MyBatis(手写大量 xml)
SpringBoot 新项目:SpringBoot + MyBatis-Plus(简单单表免写 SQL,复杂 SQL 手写 xml)
如果做微服务:SpringBoot(每个微服务) + MyBatis-Plus + SpringCloud Alibaba