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

相关推荐
Pniubi4 小时前
HashMap的扩容和树化边界
java·开发语言
Mikko74 小时前
用 Java 复刻了高中时在塞班上玩的「熔岩矿车」:纯 Swing、零依赖、没有一张图片,一个 jar 双击就能玩
java·游戏开发·swing
知了学历孙老师4 小时前
小自考的校考和统考,出题方和难度差在哪
java·大数据·前端
Java爱好狂.5 小时前
Java初学者如何一周速通SpringBoot!
java·spring boot·后端·spring·高并发·架构师·java面试
秋饼5 小时前
LLM API密钥动态轮换实战:Spring Vault + Spring AI + 多Provider路由
java·ai·技术分享·后端开发
福兮说7 小时前
JSON 格式正确,数据就可靠吗?我用一份自编配置检查类型与空值
java·前端·json
紧跟先前的步伐8 小时前
Go AI Agent 实战 03|Token、上下文窗口与模型调用成本
java·人工智能·golang
const_qiu9 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog9 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
Promising_GEO9 小时前
GEE实战02期:从卫星波段开始:利用 Sentinel-2 自己计算 NDVI
java·sentinel·遥感·空间分析