SSM框架是Java EE企业级开发中的经典组合,由SpringSpring MVCMyBatis三个开源框架整合而成。它基于标准的MVC(Model-View-Controller)设计模式,旨在构建结构清晰、易于维护和高效灵活的中小型Web应用程序 。

一、SSM框架各组件详解与核心作用

框架名称 核心定位 主要职责与作用 核心特性
Spring 轻量级容器与业务层框架 作为整个应用的核心,提供IoC(控制反转) 容器来管理所有对象的生命周期和依赖关系,并通过AOP(面向切面编程) 实现声明式事务管理、日志、安全等横切关注点的统一处理 。 解耦、依赖注入、AOP、强大的整合能力。
Spring MVC 表现层(Web层)框架 基于Servlet API构建,负责处理用户的HTTP请求。它通过DispatcherServlet(前端控制器)接收请求,并协调HandlerMappingHandlerAdapterViewResolver等组件完成请求映射、处理器适配、视图渲染等流程,将结果返回给客户端 。 清晰的职责分离、灵活的配置、强大的数据绑定与验证。
MyBatis 持久层(DAO层)框架 负责与数据库交互,将Java对象与SQL语句进行映射。它封装了JDBC的繁琐操作,开发者只需编写简单的SQL和映射文件(或注解),MyBatis就能自动完成参数设置、结果集封装,极大简化了数据库访问代码 。 SQL与代码分离、动态SQL、灵活的映射配置。

二、SSM框架的层次架构与调用流程

在一个典型的SSM项目中,代码通常被组织为以下四层结构,其协作流程清晰体现了MVC模式的思想 :

  1. 持久层(Dao/Mapper层):由MyBatis实现,包含Mapper接口和对应的XML映射文件,负责执行具体的SQL操作。
  2. 业务层(Service层):由Spring管理,包含业务逻辑接口及其实现类,调用持久层完成数据操作,并处理复杂的业务规则。
  3. 控制层(Controller层):由Spring MVC实现,接收前端请求,调用相应的Service层方法处理业务,并将处理结果(数据模型)返回给视图或直接生成响应(如JSON)。
  4. 视图层(View层):通常为JSP、Thymeleaf、FreeMarker等模板技术,负责渲染最终的HTML页面。在前后端分离架构中,此层常被RESTful API和前端框架(如Vue、React)替代。

其核心调用流程可概括为:用户请求 → DispatcherServletHandlerMappingControllerServiceDao/Mapper → 数据库 → 原路返回数据 → ViewResolver → 渲染视图 → 响应给用户

三、SSM框架的快速集成与核心配置示例

以下是一个简化的SSM项目集成步骤和关键配置代码片段。

1. 创建Maven项目并导入核心依赖

pom.xml中引入Spring、Spring MVC、MyBatis及其整合包、数据库驱动等依赖 。

<dependencies>
    <!-- Spring Context (包含IoC核心) -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.23</version>
    </dependency>
    <!-- Spring MVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.23</version>
    </dependency>
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.11</version>
    </dependency>
    <!-- MyBatis-Spring整合包 (关键) -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.1.0</version>
    </dependency>
    <!-- 数据库连接池与驱动 (以MySQL为例) -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.2.16</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

2. 配置Spring核心配置文件(applicationContext.xml)

此文件配置IoC容器、事务管理、以及整合MyBatis 。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!-- 1. 开启注解扫描,管理Service、Dao等Bean -->
    <context:component-scan base-package="com.example.service, com.example.dao"/>

    <!-- 2. 配置数据源 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="jdbc:mysql://localhost:3306/your_db?useSSL=false&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
    </bean>

    <!-- 3. 配置SqlSessionFactoryBean (MyBatis与Spring整合的关键) -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 指定MyBatis全局配置文件位置 -->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!-- 指定Mapper XML文件的位置 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!-- 4. 配置Mapper扫描器,自动为Mapper接口创建代理对象 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

    <!-- 5. 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 开启注解驱动的事务管理 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

3. 配置Spring MVC配置文件(spring-mvc.xml)

此文件配置Controller扫描、视图解析器等Web层相关组件 。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       https://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 扫描Controller -->
    <context:component-scan base-package="com.example.controller"/>
    
    <!-- 开启MVC注解驱动,支持@Controller, @RequestMapping等 -->
    <mvc:annotation-driven/>
    
    <!-- 配置视图解析器 (用于JSP) -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    
    <!-- 处理静态资源 -->
    <mvc:default-servlet-handler/>
</beans>

4. 配置MyBatis全局配置文件(mybatis-config.xml)

此文件配置MyBatis的全局行为,如别名、设置等。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- 开启驼峰命名自动映射 -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- 打印查询语句 (调试用) -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <!-- 配置类型别名,简化Mapper XML中的类型书写 -->
    <typeAliases>
        <package name="com.example.entity"/>
    </typeAliases>
</configuration>

5. 配置Web.xml

WEB-INF/web.xml中配置DispatcherServlet并加载Spring配置文件 。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!-- 1. 配置Spring上下文监听器,加载applicationContext.xml -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <!-- 2. 配置Spring MVC的前端控制器DispatcherServlet -->
    <servlet>
        <servlet-name>dispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 3. 字符编码过滤器 -->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

四、SSM框架的核心优势与应用场景

SSM框架组合之所以流行,主要归功于其高内聚、低耦合的架构设计。Spring的IoC和AOP实现了业务组件间的解耦和通用逻辑的模块化;Spring MVC提供了灵活、强大的Web请求处理能力;MyBatis则在保持SQL灵活性的同时,简化了数据库操作 。这种组合非常适合开发传统的中小型单体Web应用,如企业内部管理系统、电商后台、内容管理平台等。它能够让开发者更专注于业务逻辑本身,而非框架的整合与配置,从而提升开发效率和项目的可维护性 。

然而,随着微服务架构和Spring Boot的兴起,SSM的XML配置繁琐项目搭建复杂等问题逐渐凸显。因此,在现代Java开发中,Spring Boot + MyBatisSpring Boot + Spring Data JPA已成为更主流的快速开发选择,它们通过约定大于配置自动装配的理念,极大简化了SSM的整合过程。但理解SSM依然是掌握Java Web开发体系的重要基石 。


参考来源

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐