一、三者职责分工
框架
核心职责
对应代码/配置
Spring
管理组件生命周期、依赖注入(IoC)、事务管理、整合数据源与 MyBatis。
spring.xml
(数据源、SqlSessionFactory、包扫描)、@Service
、@Autowired
等注解。
Spring MVC
处理 HTTP 请求与响应,通过控制器(Controller)协调业务逻辑与视图渲染。
springmvc.xml
(控制器扫描、静态资源处理)、@RestController
、@RequestMapping
等注解。
MyBatis
实现数据库操作,通过 Mapper 接口与 XML 文件定义 SQL,简化 JDBC 操作。
UserMapper.java
(接口)、UserMapper.xml
(SQL 映射)、MyBatis-Spring 整合配置。
二、整合流程与代码解析
1. 请求处理全流程
graph TD
A[客户端请求 /user] --> B[DispatcherServlet]
B --> C[HandlerMapping 匹配控制器]
C --> D[UserContreoller.selectAll()]
D --> E[UserService.selectAll()]
E --> F[UserMapper.selectAll()]
F --> G[MyBatis 执行 SQL 查询]
G --> H[返回 JSON 数据]
H --> I[客户端接收响应]
2. Spring 的核心作用
依赖注入(DI)与组件管理
代码示例 :UserService
中通过 @Autowired
注入 UserMapper
:
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
}
- **配置支持**:
* `spring.xml` 中通过 `<context:component-scan>` 扫描 `cn.cjxy` 包(排除 Controller),管理 Service 和 Mapper 组件。
* `<bean>` 定义数据源和 MyBatis 工厂:
< bean id = " datasource" class = " com.alibaba.druid.pool.DruidDataSource" >
< property name = " username" value = " ${name}" />
</ bean>
< bean id = " sqlSessionFactory" class = " org.mybatis.spring.SqlSessionFactoryBean" >
< property name = " dataSource" ref = " datasource" />
</ bean>
3. Spring MVC 的核心作用
控制器与请求映射
代码示例 :UserContreoller
处理 /user
请求:
@RestController
@RequestMapping ( "/user" )
public class UserContreoller {
@GetMapping
public List < User > selectAll ( ) { . . . }
}
- **配置支持**:
* `springmvc.xml` 中通过 `<context:component-scan>` 仅扫描 `@Controller` 注解。
* `<mvc:annotation-driven>` 启用注解驱动的控制器(如 `@GetMapping`)。
4. MyBatis 的核心作用
数据持久化与 SQL 映射
代码示例 :UserMapper.xml
定义 SQL:
< mapper namespace = " cn.cjxy.mapper.UserMapper" >
< select id = " selectAll" resultType = " User" >
SELECT * FROM user
</ select>
</ mapper>
- **整合 Spring**:
* `spring.xml` 中配置 `MapperScannerConfigurer`,自动扫描 Mapper 接口并生成代理对象:
< bean class = " org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name = " basePackage" value = " cn.cjxy.mapper" />
</ bean>
三、关键整合点剖析
1. 分层架构与依赖传递
Controller → Service → Mapper
@Autowired
private UserService userService;
@Autowired
private UserMapper userMapper;
- **Spring 保障**:通过 IoC 容器自动注入依赖,无需手动创建对象。
2. 配置分离与职责清晰
配置文件
作用
spring.xml
管理数据源、MyBatis 工厂、Service/Mapper 组件扫描(排除 Controller)。
springmvc.xml
管理控制器、静态资源处理、JSON 序列化(通过 <mvc:annotation-driven>
)。
web.xml
配置 Spring 监听器、DispatcherServlet、字符编码过滤器,启动 Spring 和 Spring MVC 容器。
3. 数据源与事务管理
< bean id = " datasource" class = " com.alibaba.druid.pool.DruidDataSource" >
< property name = " username" value = " ${name}" />
</ bean>
事务管理(需补充) : 当前配置缺少事务管理器,建议在 spring.xml
中添加:
< bean id = " transactionManager" class = " org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name = " dataSource" ref = " datasource" />
</ bean>
< tx: annotation-driven/>
四、潜在问题与改进建议
1. 配置问题
属性占位符错误 : spring.xml
中引用 jdbc.properties
的键名应为 username
,但配置中使用了 ${name}
。 修正 :
# jdbc.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root # 原配置中键名是 name,应改为 username
password=xxxx
2. 依赖兼容性
MyBatis-Spring 版本 : MyBatis 3.5.10 需搭配 MyBatis-Spring 2.0.7+,当前版本为 2.0.5,建议升级:
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis-spring</ artifactId>
< version> 2.0.7</ version>
</ dependency>
五、总结
Spring 是“粘合剂”,管理所有 Java 组件(Bean)和资源(数据源、事务)。
Spring MVC 是“交通指挥员”,负责将 HTTP 请求分发给对应的控制器。
MyBatis 是“数据库操作员”,通过接口和 XML 实现 SQL 与 Java 代码的解耦。
通过分层架构和依赖注入,SSM 实现了高内聚低耦合,使各层职责清晰、易于维护。理解三者协作流程后,可快速定位配置错误(如属性注入失败、Mapper 未扫描)并优化代码结构。