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

相关推荐
唐青枫16 小时前
Java JDBC 实战指南:从 Connection 到事务和连接池
java
一个做软件开发的牛马17 小时前
MyBatis-Plus 从零实战:完整搭建可运行 Demo,BaseMapper 零 SQL、Wrapper 条件构造、分页插件与代码生成器详解
java·后端
用户37215742613517 小时前
Java 处理 PDF 图片:提取 PDF 中的图片,并压缩 PDF 图片体积
java
用户37215742613518 小时前
Java 打印 Word 文档:从基础打印到高级设置
java
用户3521802454751 天前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
东坡白菜2 天前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫2 天前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq2 天前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
plainGeekDev2 天前
null 判断 → Kotlin 可空类型
android·java·kotlin
糖拌西瓜皮2 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js