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

SSM框架

SSM 框架是 Java Web 开发中广泛使用的经典组合,由 SpringSpring MVCMyBatis 三个开源框架整合而成,适用于构建中大型企业级应用。

1. SSM框架组成

框架作用核心特性
Spring管理业务层(Service)和持久层(DAO)的对象依赖关系(IoC)和事务(AOP)依赖注入(DI)、面向对象编程(AOP)、声明式事务管理、模块化设计
Spring MVC处理Web层的请求分发、视图渲染、遵循MVC设计模式基于注解的控制器(@Controller)、灵活的路由配置(@RequestMapping)等
MyBatis负责数据持久化,简化数据库操作(SQL映射)XML/注解配置SQL、动态SQL、结果集映射、与Spring无缝集成

2. SSM框架工作流程

  1. 用户请求 → 由DispatcherServlet(Spring MVC前端控制器)接收
  2. 请求分发 → 根据@RequestMapping找到对应的Controller
  3. 业务处理 → Controller调用Service层(Spring管理的业务逻辑)
  4. 数据操作 → Service层通过DAO/Mapper接口(MyBatis实现)访问数据库
  5. 返回结果 → Controller将处理结果封装为ModelAndView或JSON,渲染视图(JSP/HTML)返回客户端

3. 三层结构(表现层、业务层、持久层)

3.1 表现层(Web层)

  • 对应框架Spring MVC
  • 核心作用:处理用户请求和响应,控制页面跳转和数据交互。
  • 关键组件
    • Controller:接收 HTTP 请求,解析参数,调用业务层处理,返回视图或数据。
    • View(视图层):渲染页面(如 JSP、HTML等)。
    • DispatcherServlet:Spring MVC 的前端控制器,负责请求分发。

3.2 业务层(Service层)

  • 对应框架Spring
  • 核心作用:实现业务逻辑,处理事务管理,协调多个数据操作(如数据库和缓存)。
  • 关键组件
    • Service 接口与实现类:定义业务方法,调用持久层完成数据操作。
    • 事务管理:通过 @Transactional 注解实现声明式事务(如回滚、传播行为)。

3.3 持久层(DAO/Mapper层)

  • 对应框架MyBatis
  • 核心作用:直接操作数据库,执行 SQL 语句,完成数据的增删改查(CRUD)。
  • 关键组件
    • Mapper 接口与 XML 文件:定义数据库操作方法,通过 MyBatis 动态代理实现。
    • 实体类(POJO):映射数据库表结构(如 User 类对应 user 表)。

4. SSM整合

项目根目录:

ssm-project/
├── src/
│   ├── main/
│   │   ├── java/          # 核心Java源代码
│   │   ├── resources/     # 配置文件及资源
│   │   └── webapp/        # Web应用资源
│   └── test/              # 单元测试代码
├── pom.xml                # Maven项目配置

4.1 src/main/jave目录:

存放Java业务代码,按分层架构组织。

com.example.ssm
├── controller/    # Spring MVC控制器(处理HTTP请求)
├── service/       # 业务逻辑层接口
│   └── impl/     # 业务逻辑层实现类
├── dao/           # 数据访问层接口(MyBatis Mapper接口)
├── entity/        # 实体类(对应数据库表)
├── dto/           # 数据传输对象(Data Transfer Object)
├── util/          # 工具类(如日期处理、字符串处理)
└── config/        # Java配置类(替代XML配置,可选)
  • Controller:接收请求参数,调用Service层返回结果,转发视图。

  • Service:实现业务逻辑,处理事务管理(通过Spring声明式事务)。

  • Dao/Mapper:定义数据库操作接口,由MyBatis动态代理实现。

4.2 src/main/resources目录:

存放配置文件和非Java资源。

resources/
├── spring/             # Spring核心配置
│   ├── applicationContext.xml       # Spring主配置(数据源、事务等)
│   └── spring-mvc.xml  # Spring MVC配置(拦截器、视图解析器等)
├── mybatis/            # MyBatis配置
│   ├── mybatis-config.xml # MyBatis全局配置(可选)
│   └── mapper/         # MyBatis XML映射文件(SQL语句)
├── db.properties       # 数据库连接配置
└── log4j2.xml          # 日志配置文件
  • Spring配置:定义数据源DataSource、事务管理器TransactionManager、组件扫描等。

  • MyBatis配置:配置SqlSessionFactory,指定Mapper XML文件位置。

  • 属性文件:解耦数据库连接信息,便于环境切换。

4.3 src/main/webapp目录:

Web应用根目录,存放静态资源和WEB-INF配置。

webapp/
├── WEB-INF/
│   ├── web.xml         # 部署描述符(配置DispatcherServlet)
│   └── views/          # 视图文件(JSP/Thymeleaf等)
├── static/             # 静态资源(CSS/JS/图片)
└── index.jsp           # 默认首页
  • web.xml:配置Spring MVC的前端控制器DispatcherServlet,指定Spring配置文件位置。

  • 视图层:JSP或其他模板引擎文件,由视图解析器定位。

  • 静态资源:通过<mvc:resources/>配置直接访问。

4.4 src/test目录:

存放单元测试代码和测试资源。

  • JUnit测试:对Service、DAO层进行单元测试,使用@ContextConfiguration加载Spring配置。

  • 测试资源:可单独配置测试数据库(如H2内存数据库)。

4.5 POM.XML文件:

Maven项目核心配置,管理依赖和构建流程。

<dependencies>
    <!-- Spring Core -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.10</version>
    </dependency>
    
    <!-- Spring MVC -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.10</version>
    </dependency>
    
    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    
    <!-- MyBatis-Spring整合包 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.6</version>
    </dependency>
    
    <!-- 数据库驱动(如MySQL) -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>
    
    <!-- 数据源(如C3P0) -->
    <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.0.2</version>
    </dependency>
    
    <!-- JSTL支持 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

4.6 关键整合点

  1. Spring与MyBatis整合:
    • 配置SqlSessionFactoryBean,注入数据源和Mapper XML路径。

    • 使用MapperScannerConfigurer自动扫描DAO接口生成代理类。

  2. Spring MVC配置:
    • 启用注解驱动<mvc:annotation-driven/>

    • 配置视图解析器InternalResourceViewResolver

  3. 事务管理:
    • applicationContext.xml中配置DataSourceTransactionManager,通过@Transactional注解管理事务。

5. 常见问题

❓ Service 层和 DAO 层都要写接口吗?
  • 最佳方法:Service 层建议写接口(方便后续扩展或 AOP 代理),DAO 层可省略接口(MyBatis Mapper 接口已由框架动态代理实现)。
❓ 实体类(如 User)属于哪一层?
  • Model 层:贯穿所有层,但不归属任何框架。DTO(数据传输对象)和 VO(视图对象)可根据场景补充。
❓ 如何避免跨层调用?
  • 禁止 Controller 直接调用 Mapper,必须通过 Service 层协调(确保事务和逻辑完整性)。

结束啦,去继续学习SpringBoot了~

相关文章:

  • NLP常见任务专题介绍(1)-关系抽取(Relation Extraction, RE)任务训练模板
  • SSH可以连接成功,但VSCode连接不成功的问题
  • 【GPT入门】第6课 openai接口介绍与参数说明
  • 【09】单片机编程核心技巧:变量赋值,从定义到存储的底层逻辑
  • blender学习25.3.11
  • visual studio 2022最常用的快捷键
  • 小程序实现存储用户注册信息功能 前后端+数据库联调
  • 《 C++ 点滴漫谈: 三十 》高手写 C++,参数这样传才高效!你真的用对了吗?
  • 分而治之:用于 RGB-T 显著目标检测的 Confluent Triple-Flow 网络
  • Elasticsearch Java API Client [8.17] 使用
  • bug小记
  • git合并分支回滚的方法
  • Docker篇
  • ACE学习2——write transaction
  • 【Linux docker】关于docker启动出错的解决方法。
  • AWS DynamoDB深度解析:高并发场景下的NoSQL数据库设计与优化实践
  • python基础-字符串速查笔记
  • vscode arm拓展 keil acm5 到acm6迁移
  • HarmonyOS Next 中的状态管理
  • 基础玩转物联网-4G模块如何快速实现与MQTT服务器通信
  • 李伟任山东省委常委、省纪委书记
  • 小雨伞保险经纪母公司手回集团通过港交所聆讯
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区
  • 江苏省委组织部副部长高颜已任南京市委常委、组织部部长
  • “80后”北京市东城区副区长王智勇获公示拟任区委常委
  • “一码难求”的Manus开放注册但价格不菲,智能体距离“实用”还有多远