当前位置: 首页 > news >正文

Spring MVC、Spring 与 MyBatis 整合详解


一、三者职责分工
框架核心职责对应代码/配置
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 {@Autowiredprivate UserMapper userMapper; // Spring 自动注入 MyBatis 代理对象
}
- **配置支持**:  * `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><!-- MyBatis 工厂 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="datasource"/>
</bean>

3. Spring MVC 的核心作用
  • 控制器与请求映射
    • 代码示例UserContreoller 处理 /user 请求:
@RestController // 表示返回 JSON 数据
@RequestMapping("/user")
public class UserContreoller {@GetMappingpublic List<User> selectAll() { ... }
}
- **配置支持**:  * `springmvc.xml` 中通过 `<context:component-scan>` 仅扫描 `@Controller` 注解。  * `<mvc:annotation-driven>` 启用注解驱动的控制器(如 `@GetMapping`)。

4. MyBatis 的核心作用
  • 数据持久化与 SQL 映射
    • 代码示例UserMapper.xml 定义 SQL:
<!-- UserMapper.xml -->
<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
    • 依赖关系
// Controller 依赖 Service
@Autowired
private UserService userService;// Service 依赖 Mapper
@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. 数据源与事务管理
  • Druid 数据源
<bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource"><property name="username" value="${name}"/> <!-- 从 jdbc.properties 读取 -->
</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 未扫描)并优化代码结构。

http://www.xdnf.cn/news/664561.html

相关文章:

  • 欧拉操作系统下安装hadoop集群
  • 【前端基础】Promise 详解
  • FacePoke创意交互实战:Cpolar技术赋能远程人像编辑的趣味实现
  • 国内短剧 vs. 海外短剧系统开发:2025年SEO优化与市场策略全解析
  • 机械设计插件
  • MS1824+MS7210+MS2130 1080P@60Hz USB3.0采集
  • 【文献阅读】Mixture of Lookup Experts
  • 语音识别技术在人工智能中的应用
  • 03 环境变量和标签
  • 电子元器件散热方式
  • 医院门户网站群改版技术白皮书
  • 如何调试CATIA CAA程序导致的CATIA异常崩溃问题
  • Vue 3 核心知识点全览
  • 电子电气架构 -- 第五代汽车电子电气(E/E)架构的两种主导实施方式
  • c++ 二叉搜索树(BinarySearchTree)
  • 晚期NSCLC临床试验终点与分析策略
  • 【力扣】关于链表索引
  • 初识LangChain
  • Visual Studio 调试中 PDB 与图像不匹配
  • STM32F103_Bootloader程序开发03 - 启动入口与升级模式判断(boot_entry.c与boot_entry.h)
  • JetsonHacksNano RealSense自动安装脚本文件解析
  • 公链开发全生态:技术架构、生态构建与未来图景
  • 环境配置相关问题以及解决方案
  • JavaScripts 常见误区
  • 小刚说C语言刷题—1152 - 求n个数的最大值和最小值
  • mybatis-plus动态分页
  • ARM架构
  • 密钥分发与公钥证书
  • 工厂方法模式之Factory Method(工厂方法)
  • Python网络编码——聊天小工具