SSM 框架(Spring + SpringMVC + MyBatis)

面试 + 工作必背,极简清晰版

SSM = Spring(容器) + SpringMVC(Web层) + MyBatis(持久层)

是 Java 后端最经典的企业级开发框架组合。


一、三大框架作用(一句话记住)

  1. Spring:工厂,管理所有对象(Service、Controller、Dao),提供 IOC、AOP、事务
  2. SpringMVC:接收前端请求、分发、参数接收、返回数据
  3. MyBatis:操作数据库,写 SQL,比 JDBC 简单

二、Spring 核心(最关键)

1. 两大核心思想

① IOC 控制反转

  • 把创建对象的权利交给 Spring
  • 不用自己 new 对象,Spring 帮你创建、管理
  • 实现:工厂模式 + 反射 + 配置

② AOP 面向切面编程

  • 不修改源码,统一增强功能
  • 场景:日志、事务、权限、性能监控
  • 底层:动态代理
    • JDK 动态代理(有接口)
    • CGLIB 代理(无接口)

2. Spring 事务管理

  • 声明式事务@Transactional
  • 核心:事务传播机制、隔离级别、回滚
  • 传播机制(常用):
    • REQUIRED:有就用,没有就新建(默认)
    • SUPPORTS:支持当前事务
  • 回滚:默认运行时异常回滚

3. 常用注解

  • @Component 通用组件
  • @Service 业务层
  • @Controller 控制层
  • @Repository 持久层
  • @Autowired 自动注入
  • @Value 读取配置
  • @Configuration 配置类

三、SpringMVC 核心

1. 执行流程(面试必问)

  1. 前端请求 → DispatcherServlet(前端控制器)
  2. 查找 HandlerMapping → 找到对应 Controller
  3. 执行 Controller 方法
  4. 返回 ModelAndView / JSON
  5. 视图解析器渲染 / 直接返回 JSON

2. 核心注解

  • @Controller 控制器
  • @RestController = @Controller + @ResponseBody(返回 JSON)
  • @RequestMapping 请求路径
  • @GetMapping / @PostMapping
  • @RequestParam 接收参数
  • @RequestBody 接收 JSON
  • @PathVariable 路径参数

3. 作用

接收请求 → 调用 Service → 返回结果给前端


四、MyBatis 核心

1. 是什么?

优秀的持久层框架,简化 JDBC,支持自定义 SQL

2. 核心组件

  • SqlSessionFactory:工厂
  • SqlSession:连接会话
  • Mapper 接口:Dao 层
  • Mapper.xml:写 SQL

3. 工作流程

  1. 加载核心配置
  2. 创建 SqlSessionFactory
  3. 创建 SqlSession
  4. 执行 Mapper 接口方法
  5. MyBatis 自动执行 SQL 并返回结果

4. 核心特性

  • 一级缓存(SqlSession 级别,默认开启)
  • 二级缓存(全局缓存,需手动开启)
  • 动态 SQL<if>、<where>、<foreach>
  • 结果集自动映射

5. 注解版

java 复制代码
@Select("select * from user where id=#{id}")
User findById(Integer id);

五、SSM 整合流程(最标准)

  1. 导入 Spring、SpringMVC、MyBatis、MySQL、连接池依赖
  2. 配置 Spring:扫描组件、事务
  3. 配置 SpringMVC:开启注解、静态资源、视图解析器
  4. 配置 MyBatis:数据源、SqlSessionFactory、Mapper 扫描
  5. 写三层架构:
    • Controller → Service → Dao(Mapper)
  6. 部署 Tomcat 运行

六、SSM 项目标准结构

复制代码
com.xxx
├─ controller   控制层
├─ service      业务接口
│  └─ impl      实现类
├─ mapper       Dao 层
├─ pojo/entity  实体类
├─ vo           前端返回对象
├─ config       配置类
└─ util         工具类

七、高频面试题(必背)

1. Spring IOC 原理?

  • 读取配置/注解
  • 通过反射创建对象
  • 放入 Bean 工厂(容器)
  • 需要时自动注入

2. AOP 底层?

动态代理:JDK 代理 / CGLIB

3. Spring 事务失效场景?

  • 非 public 方法
  • 异常被 try-catch 吃掉
  • 自调用(没有经过代理)

4. MyBatis 一级缓存 vs 二级缓存

  • 一级:SqlSession 级别
  • 二级:Mapper 级别,跨 Session

5. SpringMVC 执行流程?

请求 → DispatcherServlet → 映射 → 执行方法 → 返回结果


八、最简单总结

  • Spring:管理对象、事务、AOP
  • SpringMVC:接收请求、返回数据
  • MyBatis:操作数据库、写 SQL

相关推荐
编程(变成)小辣鸡17 分钟前
如何防止接口被恶意刷?
java·后端·网络安全
大圣编程5 小时前
Java 多维数组详解
java·开发语言
万法若空8 小时前
【算法-查找】查找算法
java·数据结构·算法
HZZD_HZZD10 小时前
DL/T 645-2026新国标深度解读与智能电表协议适配实战:从帧结构变化到Java采集器升级的全链路改造方案
java·开发语言
山登绝顶我为峰 3(^v^)312 小时前
C/C++ 交叉编译方法
java·c语言·c++
一叶飘零_sweeeet13 小时前
Codex 与 Claude Code 深度拆解:两代 AI 编程智能体的技术本质与 Java 实战指南
java·ai·codex·claude code
Listen·Rain13 小时前
提示词和提示词模板
java·人工智能·spring boot
wuqingshun31415913 小时前
重写equals而不重写hashCode,会出什么问题?
java·开发语言
我今晚不熬夜14 小时前
Java语言实现Modbus协议通过用串口读取数据(以RTU为例)
java·网络协议