在企业级 Java Web 开发中,SSM(Spring + SpringMVC + MyBatis)是广泛应用的技术组合。该架构以 Spring 作为核心容器,集成 SpringMVC 实现表现层控制,并通过 MyBatis 完成数据持久化操作,达到分层清晰、开发高效的目标。以下内容基于实际开发流程,对关键整合要点进行系统性总结。
选择合适版本并合理管理依赖是整合成功的基础:
Spring 核心模块:
spring-context(IOC 容器)、
spring-aop(AOP 支持)、
spring-tx(事务管理)、
spring-jdbc(JDBC 工具支持)
SpringMVC 相关依赖:
spring-web、
spring-webmvc(包含前端控制器和视图解析功能)
MyBatis 及整合依赖:
mybatis、
mybatis-spring(实现 Spring 与 MyBatis 的无缝对接)
数据库连接组件:
mysql-connector-java(MySQL 驱动)、
druid(数据库连接池)
Web 层基础依赖:
servlet-api、
jsp-api、
jstl(支持页面渲染)
日志体系配置:
slf4j-api +
slf4j-log4j12 +
log4j(统一日志输出格式)
Maven 配置注意事项:
<properties> 统一管理版本号遵循 MVC 分层思想,确保代码结构清晰、职责分明:
配置文件组织策略:
applicationContext.xml —— Spring 主配置文件,涵盖 IOC、事务及 MyBatis 整合配置
springmvc.xml —— SpringMVC 专用配置,包括视图解析、注解驱动等
web.xml —— Web 容器配置,定义 DispatcherServlet、过滤器、监听器等
mappers/AccountDao.xml —— MyBatis 的 SQL 映射文件,独立维护 SQL 语句
Spring 通过 IOC 实现对象的集中管理,降低组件间耦合度:
@Service、
@Repository、
@Autowired
<!-- 扫描业务层Service -->
<context:component-scan base-package="cn.tx.service"/>
ClassPathXmlApplicationContext
加载配置,获取 Bean 并调用其方法验证是否正常注入常用注解及其作用范围:
@Service(标记业务层类)、
@Repository(标识持久层接口)、
@Controller(控制器类)
@Autowired(按类型自动装配)、
@Qualifier(配合 @Autowired 使用,按名称注入)
设计思想:由 Spring 容器统一托管各层级组件,实现真正的松耦合架构。
配置前端控制器作为请求入口:
ContextLoaderListener
监听器,启动时加载
applicationContext.xml
文件
springmvc.xml
被 DispatcherServlet 加载,指定处理路径如
*.do
CharacterEncodingFilter
解决 POST 请求中的乱码问题
springmvc.xml 核心设置:
base-package="cn.tx.controller"
InternalResourceViewResolver
设置 JSP 前缀(/pages/)与后缀(.jsp)
mvc:annotation-driven
以识别
@RequestMapping
等控制器注解
mvc:resources
允许 CSS、JS、图片等资源直接访问SpringMVC 拥有自己的子容器(管理 Controller),但需调用 Spring 主容器中的 Service 和 DAO 对象。
解决方案:在 web.xml 中配置
ContextLoaderListener
监听器,使其在应用启动时加载
applicationContext.xml
配置文件
<!-- Spring监听器:加载Spring核心配置 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
实现效果:在 Controller 中可通过
@Autowired
注解直接注入 Service 实例,完成业务方法调用。
@Controller
—— 标记类为处理器控制器
@RequestMapping
—— 定义请求映射路径,支持类级别与方法级别的多层路径匹配
save(Account account)
自动封装表单字段
ModelAndView
返回模型数据与视图名,或直接返回字符串作为逻辑视图名核心配置文件:
SqlMapConfig.xml
包含环境配置信息以及映射文件的加载路径。
核心组件结构:
SqlSessionFactory
→
SqlSession
→
Mapper代理对象
最终实现对 DAO 接口的操作代理。
两种 SQL 映射方式:
AccountDao.xml
@Select
@Insert
目标是将 MyBatis 的关键对象交由 Spring 容器统一管理,包括数据源、SqlSessionFactory 和 Mapper 代理。原 MyBatis 的独立配置被迁移到 Spring 环境中。
SqlMapConfig.xml
其功能由以下 Spring 配置替代:
applicationContext.xml
(1)数据源配置(使用 Druid 连接池)
通过 Spring 来管理数据库连接池,取代 MyBatis 自身的数据源设置:
xml<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///ssm"/> <property name="username" value="root"/> <property name="password" value="root"/> </bean>
(2)SqlSessionFactoryBean 配置
借助 MyBatis-Spring 提供的工厂 Bean 创建会话工厂,替代传统 MyBatis 中的构建方式:
SqlSessionFactory
xml<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <!-- 注入数据源 --> <property name="mapperLocations" value="classpath:mappers/*.xml"/> <!-- 加载MyBatis映射文件 --> </bean>
(3)Mapper 扫描器配置
自动扫描指定包下的 DAO 接口,并生成对应的代理对象注入到 Spring 容器中:
xml<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactory" ref="sessionFactory"/> <property name="basePackage" value="cn.tx.dao"/> <!-- 扫描DAO接口包 --> </bean>
效果说明:无需手动编写 DAO 实现类,Spring 自动生成代理;Service 层可通过如下方式直接引用:
@Autowired
(1)主要组成元素
DataSourceTransactionManager
依托于已配置的数据源进行事务控制。
tx:advice
用于定义事务属性,如是否只读、隔离级别等。
(2)关键配置细节
xml<!-- 1. 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <!-- 2. 事务通知 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="find*" read-only="true"/> <!-- 查询方法只读 --> <tx:method name="*"/> <!-- 其他方法(增删改)默认事务属性 --> </tx:attributes> </tx:advice> <!-- 3. AOP切面:织入业务层实现类 --> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(public * cn.tx.service.*ServiceImpl.*(..))"/> </aop:config>
切入点表达式:
execution(public * cn.tx.service.*ServiceImpl.*(..))
表示拦截业务层所有实现类中的公共方法。
事务属性设置示例:
read-only="true"
rollback-for
propagation
前端页面(JSP):
<a href="https://m.pinggu.org/bbs/account/findAll.do">查询所有</a>
发起请求至后端。
SpringMVC 层处理:
@RequestMapping("/findAll.do")
将请求映射到对应的 Controller 方法。
Controller 层:注入 AccountService 并调用其业务方法:
findAll()
Service 层:持有 AccountDao 引用,继续调用对应方法处理业务逻辑:
findAll()
DAO 层:由 MyBatis 生成的代理对象执行实际 SQL 操作:
select * from account
数据流向:从 DAO → Service → Controller,最终通过 ModelAndView 返回视图结果。
前端表单提交:
form action="/account/save.do" method="post"
用户填写并提交表单数据。
Controller 层:利用参数绑定机制自动封装数据:
Account account
然后调用服务层的新增方法:
accountService.save(account)
Service 层:调用 DAO 方法完成持久化操作,同时激活 Spring 的声明式事务支持:
accountDao.save(account)
DAO 层:使用注解方式定义插入语句:
@Insert
实际执行的 SQL 如下:
insert into account (name,money) values (#{name},#{money})
事务控制:若无异常发生,则提交事务;一旦出现异常,自动回滚,确保数据一致性。
applicationContext.xml
而 SpringMVC 仅扫描 Controller 层:
springmvc.xml
避免重复创建 Bean 导致冲突。
CharacterEncodingFilter
并将请求/响应编码设为:
url-pattern
/*
SSM 框架整合的核心在于:Spring 作为“粘合剂”,统一协调三大框架的组件协作:
该整合方案实现了各层之间的解耦设计、组件可复用性提升、事务集中管理,构成了 Java Web 开发中稳定高效的架构模式,也为后续学习 Spring Boot 打下坚实基础。
扫码加好友,拉您进群



收藏
