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

Spring + Spring MVC + MyBatis

SSM 是 Spring + Spring MVC + MyBatis 的缩写,是 Java 企业级开发中经典的三层架构组合框架,广泛用于开发中小型企业级应用。三者分工明确、协同工作,形成了 “业务层 + 表现层 + 数据访问层” 的完整解决方案。

一、SSM 各组件的角色与核心功能

1. Spring(业务层框架)
  • 核心定位:负责全局的对象管理(IOC)和切面编程(AOP),是 SSM 的 “胶水”,整合其他框架。
  • 核心功能
    • IOC(控制反转):通过容器统一管理对象的创建、依赖注入和生命周期,降低类之间的耦合。
    • AOP(面向切面编程):将日志、事务、权限等横切逻辑抽离为切面,与业务逻辑解耦。
    • 事务管理:通过声明式事务(@Transactional)简化事务控制,保证数据一致性。
  • 核心组件
    • ApplicationContext:IOC 容器的核心实现。
    • @Component@Service@Autowired:用于对象注册和依赖注入。
    • @Aspect@Transactional:用于 AOP 和事务管理。
2. Spring MVC(表现层框架)
  • 核心定位:处理 Web 请求,负责前端与后端的交互,是 MVC 设计模式的实现。
  • MVC 角色分工
    • Model(模型):封装业务数据(如 UserOrder 实体类)。
    • View(视图):展示数据(如 JSP、Thymeleaf 页面)。
    • Controller(控制器):接收请求、调用业务逻辑、返回结果(如 @Controller 标注的类)。
  • 核心功能
    • 请求映射:通过 @RequestMapping 等注解将 URL 与控制器方法绑定。
    • 参数绑定:自动将请求参数转换为 Java 对象(如表单数据 → User 对象)。
    • 视图解析:将控制器返回的逻辑视图名解析为实际视图(如 index → WEB-INF/index.jsp)。
    • 拦截器:对请求进行前置 / 后置处理(如登录验证、日志记录)。
  • 核心组件
    • DispatcherServlet:前端控制器,统一处理所有请求,分发到对应控制器。
    • @Controller@RequestMapping@RequestParam:用于请求处理。
    • ViewResolver:视图解析器,负责视图定位。
3. MyBatis(数据访问层框架)
  • 核心定位:简化数据库操作,实现 Java 对象与数据库表的映射(ORM),替代传统 JDBC。
  • 核心功能
    • SQL 映射:通过 XML 或注解定义 SQL 语句,将查询结果映射为 Java 对象。
    • 参数映射:自动将 Java 对象的属性映射为 SQL 参数(支持 #{} 占位符,防止 SQL 注入)。
    • 事务支持:与 Spring 的事务管理整合,保证数据操作的原子性。
  • 核心组件
    • SqlSessionFactory:创建 SqlSession 的工厂(依赖数据源配置)。
    • SqlSession:执行 SQL 的核心接口(提供 selectOneinsert 等方法)。
    • Mapper 接口:定义数据操作方法,与 XML 映射文件关联(无需实现类,MyBatis 动态代理生成)。
    • 映射文件(如 UserMapper.xml):存放 SQL 语句,定义参数和结果映射规则。

二、SSM 工作流程(请求处理全链路)

  1. 用户发起请求:浏览器发送 HTTP 请求(如 http://localhost:8080/user/1)。
  2. Spring MVC 接收请求
    • 请求被 DispatcherServlet 拦截,根据 URL 匹配 @RequestMapping 找到对应的 Controller 方法(如 UserController.getUser(1))。
  3. 调用业务逻辑
    • Controller 方法通过 @Autowired 注入 Service 层对象(如 UserService),调用其业务方法(如 userService.findById(1))。
    • Service 层可能包含事务注解(@Transactional),Spring 自动管理事务。
  4. 数据访问操作
    • Service 调用 Mapper 接口(如 UserMapper.selectById(1)),MyBatis 通过 SqlSession 执行映射文件中的 SQL(如 select * from user where id = ?)。
    • 数据库返回结果,MyBatis 将结果集映射为 User 对象,返回给 Service
  5. 处理结果返回
    • Service 将 User 对象返回给 Controller
    • Controller 将数据放入模型(Model),返回视图名(如 userInfo)。
  6. 渲染视图
    • ViewResolver 将视图名解析为实际视图(如 WEB-INF/views/userInfo.jsp),渲染页面并返回给浏览器。

三、SSM 整合核心配置

SSM 整合需通过配置文件协调三者的工作(以 XML 配置为例,也可使用注解配置):

1. Spring 配置(applicationContext.xml
<!-- 扫描 Service 层组件 -->
<context:component-scan base-package="com.example.service"/><!-- 数据源配置(连接池) -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="123456"/>
</bean><!-- MyBatis 的 SqlSessionFactory 整合 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/> <!-- 映射文件路径 --><property name="typeAliasesPackage" value="com.example.pojo"/> <!-- 实体类包 -->
</bean><!-- 扫描 Mapper 接口,生成代理对象 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.example.mapper"/>
</bean><!-- 事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>
</bean><!-- 开启声明式事务 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
2. Spring MVC 配置(spring-mvc.xml
<!-- 扫描 Controller 层组件 -->
<context:component-scan base-package="com.example.controller"/><!-- 开启 MVC 注解驱动(支持 @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><!-- 静态资源放行(如 CSS、JS、图片) -->
<mvc:default-servlet-handler/>
3. Web 配置(web.xml
<!-- Spring 容器初始化 -->
<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><!-- Spring MVC 前端控制器 -->
<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>

四、SSM 代码示例(核心层)

1. 实体类(Model)
public class User {private Integer id;private String name;private Integer age;// getters and setters
}
2. Mapper 接口(数据访问层)
public interface UserMapper {// 方法名与映射文件中的 SQL id 对应User selectById(Integer id);
}
3. MyBatis 映射文件(UserMapper.xml
<mapper namespace="com.example.mapper.UserMapper"><!-- 查询用户 --><select id="selectById" parameterType="int" resultType="User">select id, name, age from user where id = #{id}</select>
</mapper>
4. Service 层(业务逻辑)
@Service
public class UserService {@Autowiredprivate UserMapper userMapper;@Transactional // 声明事务public User findById(Integer id) {return userMapper.selectById(id);}
}
5. Controller 层(请求处理)
@Controller
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/{id}")public String getUser(@PathVariable Integer id, Model model) {User user = userService.findById(id);model.addAttribute("user", user); // 存入模型return "userInfo"; // 返回视图名(对应 WEB-INF/views/userInfo.jsp)}
}

五、SSM 的优缺点

优点
  1. 分工明确:Spring 管业务,Spring MVC 管 Web,MyBatis 管数据库,架构清晰。
  2. 灵活性高:MyBatis 允许手写 SQL,适合复杂查询场景;Spring 的 IOC/AOP 降低耦合。
  3. 成熟稳定:三者均是经过长期验证的框架,社区活跃,资料丰富。
缺点
  1. 配置繁琐:需要编写大量 XML 配置(可通过注解优化,但仍比 Spring Boot 复杂)。
  2. 开发效率:相比 Spring Boot 的 “开箱即用”,SSM 整合和配置耗时较长。
  3. 学习成本:需掌握三个框架的细节,对新手不够友好。

六、SSM 与 Spring Boot 的关系

  • Spring Boot 是 SSM 的简化:Spring Boot 整合了 SSM 的核心功能,并通过 “自动配置” 消除了繁琐的 XML 配置,内置服务器,简化了开发和部署。
  • 替代与兼容:新项目更推荐 Spring Boot,但 SSM 的核心思想(IOC、AOP、MVC)在 Spring Boot 中完全继承,掌握 SSM 后容易迁移到 Spring Boot。

总结

SSM 是 Java 企业级开发的经典组合,通过 Spring 的对象管理、Spring MVC 的 Web 交互和 MyBatis 的数据库操作,形成了完整的三层架构解决方案。尽管配置相对繁琐,但其灵活性和稳定性使其在中小型项目中仍被广泛使用。对于新手,学习 SSM 有助于理解 Java 后端开发的核心思想,为后续学习 Spring Boot、微服务等技术打下基础。

http://www.dtcms.com/a/406569.html

相关文章:

  • 酒店 深圳 网站制作如何找外包网站来做
  • 雪碧图动画实例
  • 总结之webpack
  • 义乌市建设局网站河南建设工程信息网官网洛阳至信阳省道
  • 实时云渲染云推流平台配置Redis、MySQL端口,解决中间件端口冲突
  • 网站建设会议记录增城住房和建设局网站
  • shell编程:sed - 流编辑器(6)
  • Kubernetes ConfigMap 深度解析:配置管理的核心实践Kubernetes Secret 深度解析:敏感配置的安全管理实践
  • 如何实现多人协同文档编辑器
  • 备案ip 查询网站wordpress 分类全文
  • 桂林市建设局网站网站建设招聘
  • 5G x 工业应用:探索德承工控机在5G工业应用中所扮演的关键角色
  • 队列+宽搜(BFS)-662.二叉树最大宽度-力扣(LeetCode)
  • 【C++实战㊷】C++ 原型模式实战:从概念到高效应用
  • MCP 安全“体检” | AI 驱动的 MCP 安全扫描系统
  • 股票跟单网站开发长沙网站建设推广服务
  • 谷城网站制作wordpress给用户推送消息
  • (16)ASP.NET Core2.2 通用主机(HostBuilder)
  • .NET Core报错解决【无废话上操作】
  • python+springboot+uniapp基于微信小程序的农村事务管理与交流系统
  • React 进阶优化概念(6 个)——从能写组件到写好组件(下)| 葡萄城技术团队
  • 网站建设后期怎样维护wordpress什么模块
  • 兰州市七里河建设局网站在洪雅网站做企业招聘
  • JDK 简介及核心优点以及各种版本JDK高速下载地址(文末)
  • 妙妙题!!
  • 深圳个性化网站建设公司电话野外美食网站设计欣赏
  • React 基础核心概念(8 个)——从入门到能写业务组件(上)| 葡萄城技术团队
  • 在ARM64 Ubuntu 20.04上部署Mailu邮件系统:深度排查Docker Bridge网络通信失败问题
  • 三好街做网站的淘宝客怎么做网站管理
  • 将文件从魅族手机传输到电脑或新设备