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

相关推荐
IT_Octopus11 分钟前
Spring Boot 线程池关闭:destroyMethod 的作用与最佳实践
java·spring boot·后端
用户31268748772015 分钟前
分页插件到底怎么拦截 SQL?MyBatis-Plus 插件机制原理一次讲透
mybatis
亦暖筑序39 分钟前
AgentScope-Java 入门:完善 Vue 前端、发布 GitHub,并规划下一步
java·前端·vue.js
wddptwd281 小时前
android studio 报错怎么处理 java.lang.NullPointerException
android·java·android studio
霸道流氓气质1 小时前
分布式系统中接口时序不确定性处理
java·开发语言·分布式
深入云栈1 小时前
Netty 4.2.x 源码深度解析 (四):HashedWheelTimer —— 时间轮定时调度算法
java
带刺的坐椅1 小时前
别再把 Coding Agent 当智能补全了:SolonCode 想做的是数字员工
java·solon·codex·claudecode·opencode·soloncode
大模型码小白1 小时前
在 Windows 下 Codex 安装、配置与使用详细指南
java·人工智能·windows
Gauss松鼠会2 小时前
【GaussDB】GaussDB锁阻塞源头查询
java·开发语言·前端·数据库·算法·gaussdb·经验总结
mingo_敏2 小时前
DeepAgents : 后端(Backends)
java·开发语言