SSH和SSM对比总结

2023-10-27

Java开发之路 2016-10-18 11:19

当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力。MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。框架之所以流行,在于其易复用和简化开发,精髓在思想,掌握了核心思想,我们掌握其他类似框架也不会有问题,建议大家有精力的话读一下框架源码,尤其是Spring。

SSH和SSM定义

SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。

SSM 则指的是 SpringMVC 做控制器(controller),Spring 管理各层的组件,MyBatis 负责持久化层。

共同点:1.Spring依赖注入DI来管理各层的组件。2.使用面向切面编程AOP管理事物、日志、权限等。

不同点:1.Struts2 和 SpringMVC 控制器(controller)控制视图和模型的交互机制的不同,

Struts2是Action类级别,SpringMVC是方法级别,更容易实现RESTful风格。

SSH 和 SSM 的实现原理

1.Struts2 的实现原理

SSH和SSM对比总结

Struts2框架执行步骤(Struts2使用Filter嵌入):

1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求

2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助

3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action

4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy

5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

6、ActionProxy创建一个ActionInvocation的实例。

7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

9、将处理结果返回给客户端

2.SpringMVC 的实现原理

SSH和SSM对比总结

SpringMVC框架执行步骤(SpringMVC使用Servlet嵌入):

1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。

6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

Hibernate 和 MyBatis 两种ORM框架对比

两者的相同点

Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。

Hibernate和MyBatis都支持JDBC和JTA事务处理。

两者各自优势

MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

MyBatis容易掌握,而Hibernate门槛较高。

Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳,更新操作不能指定刷新指定记录,会清空整个表,但是也可以使用第三方缓存。

Hibernate 封装性好,屏蔽了数据库差异,自动生成SQL语句,应对数据库变化能力较弱,SQL语句优化困难。

MyBatis仅实现了SQL语句和对象的映射,需要针对具体的数据库写SQL语句,应对数据库变化能力较强,SQL语句优化较为方便。

总结

SSM和SSH不同主要在MVC实现方式,以及ORM持久化方面不同(Hiibernate与Mybatis)。SSM越来越轻量级配置,将注解开发发挥到极致,且ORM实现更加灵活,SQL优化更简便;而SSH较注重配置开发,其中的Hiibernate对JDBC的完整封装更面向对象,对增删改查的数据维护更自动化,但SQL优化方面较弱,且入门门槛稍高。

附Spring家族:

SSH和SSM对比总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SSH和SSM对比总结 的相关文章

  • react + ts 配置项目路劲别名(import的时候使用@符号报错)

    前言 项目开发的过程中 tsx 页面中 import 引入项目的时候 ts 文件报错 找不到模块 xxx xxx 或其相对应的类型声明 其原因主要是因为目前 ts 对 指向 src 的目录的提示是不支持的 vite默认也不支持 所以需要手动
  • 小程序优惠券内圆角

  • Java技术——Java中的static关键字解析

    0 前言 static是Java中的重要的一个点 也是面试的时候经常被问到的点 如果理解不够很容易给面试官语言基础不扎实的印象 本文从static方法 static内部类 static变量 以及static代码块四个角度分别解析static
  • NRF24L01模块----6通道通讯测试

    一 MCU与NRF24L01通讯 采用SPI通讯协议 速率最大为10M 与普通SPI元器件稍有不同的是 多了一个CE引脚 用来开启接收 发送 以及使器件进入待机模式 具体看IC DATASHEET说明 写寄存器指令格式为 1 SPI写寄存器
  • elementui 自定义loading动画加载层

    elementui 自定义loading动画加载层 main js中添加 import Loading from element ui 自定义加载层 Vue prototype openLoading function wer const
  • YOLOV8-网络结构

    代码下载链接 https download csdn net download weixin 40723264 88011324 一 整体网络 本文结合YOLOv5网络进行讲解 通过与YOLOv5网络进行比较 进一步理解YOLOv8 尽快上
  • Go语言学习笔记——jwt跨域鉴权

    文章目录 Golang jwt跨域鉴权 jwt介绍 JWT 到底是什么 JWT 和 OAuth 选择签名方法 签名方法和密钥类型 安装jwt 简单使用 生成JWT 解析jwt 测试 生成token并解析token jwt在项目中的使用 第一
  • Java学习 时间类 Period类与Duration类 / LocalDate类与Instant类 用法详解

    Java学习 时间类 Period类与Duration类 LocalDate类与Instant类 用法详解 前言 java 8 中引入的两个与日期相关的新类 Period 和 Duration 两个类看表示时间量或两个日期之间的差 两者之间
  • 交易日均千万订单的存储架构设计与实践

    一 订单系统概述 1 1 业务范围 服务业务线 快递 快运 中小件 大件 冷链 国际 B2B合同物流 CLPS 京喜 三入三出 采购入 退货入 调拨入 销售出 退供出 调拨出 等 1 2 订单中心价值 1 解耦 提升系统稳定性 原系统 交易
  • ERP现状及未来发展趋势分析?

    经过多年发展 ERP作为最重要的管理软件为国内外各类型企业所普遍接受 在我国 ERP行业已经进入成熟期 随着云计算 物联网等技术的推进 国内外竞争环境日益加剧 后ERP时代 表现出以下发展趋势 第一 商业智能化建设加强 经过多年运用 ERP
  • Linux下psql的使用(一):安装、建库、建表、数据载入、删除

    Linux下psql的使用 一 安装 建库 建表 数据载入 删除 一 Install PostgreSQL Database 安装Postgresql sudo apt get install postgresql 登录PostgreSQL
  • Java-类中代码块的使用

    Java 类中代码块的使用 1 概念 代码块 初始化块 代码块用来初始化类和对象 代码块如果有修饰的话 只能使用static 静态代码块和非静态代码块的区别 静态 内部可以有输出语句 随着类的加载而运行 初始化类的属性 一个类中定义了多个静
  • Java编程思想之《一切都是对象》理解

    前言 Java编程思想 中提到 Java是基于C 的 但相比之下 Java是一种 纯粹 的面向对象的程序设计语言 Java中不再使用指针来操作内存中的元素 而是采用对象的 引用 这个引用是作者提出的一种为了简化概念上的理解和C 语言的引用有
  • android 检查fragment是否已绑定到activity

    if isAdded 确定fragment是否绑定到Activity mPhotoRecyclerView adapter PhotoAdpter mItems
  • Linux初步入门学习 1

    一基础入门 command options partment1 partment2 命令 选项 参数1 参数2 cd 返回上一级目录 cd Desktop 进入桌面目录 cd usr bin 进入一般目录 ls 列出所有文件 lp line
  • 蓝桥杯大写变小写C语言,小写数字转化为大写数字(小米OJ题与蓝桥杯题)

    import java util public class Main public static void main String args Scanner scan new Scanner System in String str Str
  • Git本地仓库文件的创建、修改和删除

    目录 基本信息设置 1 设置用户名 2 设置用户名邮箱 Git仓库操作介绍 1 创建一个新的文件夹 2 在文件内初始化git仓库 创建git仓库 3 向仓库中添加文件 1 创建一个文件 2 将文件添加到暂存区 3 将暂存区添加到仓库 4 修
  • JavaScript贪心算法

    贪心算法 贪心算法有 霍夫曼编码 prim和kruskal最小生成树算法 Dijkstra最短路径算法 什么是贪心算法 1 针对一组数据 问题有限制值和期望值 希望从中选出几个数据 在满足限制值的情况下 期望值最大 2 每次选择当前情况下
  • UVA1601 The Morning after Halloween

    UVA1601 The Morning after Halloween 题目链接 做这道题的时候看到一个写的很好的代码 在这里保存下来 以便以后学习 题目分析 这道题和普通的bfs有所不同 解题方法也有些差别 主要是这里有三个移动的 小鬼

随机推荐

  • ant打包提示找不到文件解决办法

    运行ant打包时如果出现提示找不到tools目录下某些jar或者bat文件的错误 是因为新版android sdk目录结构产生了变化 原本在sdk tools目录下的文件被转移到sdk build tools 各个版本号文件夹中 需要复制里
  • matlab将数据输出到excel中,matlab数据输出为excel表格-如何把matlab中的数据导到excel表格中...

    如何将matlab工作空间的数据导出到excel 1 很简单的用xlswrite函数就可以了 首先打开matlab 输入你的代码 2 找到你要存放文件的位置复制绝对路径 致谢文件名的话就会存放在当前目录中 如图以f盘根目录为例 3 然后写x
  • 微信小程序集成和使用mqtt(同时支持uniapp和原生)

    前言 在集成mqtt到小程序的开发过程中 确实走了不少弯路 下了许许多多的示例 一步步踩坑到现在终于完美解决了小程序引入mqtt的方法 该方法原生和uniapp均适用 1 小程序网页配置 先登录微信公众平台 找到开发 开发管理 开发设置页面
  • 记录--MMDeploy安装、python API测试及C++推理

    目录 1 前言 2 MMDeploy安装 2 1 下载代码仓库 2 2 安装构建和编译工具链 2 3 创建Conda虚拟环境 2 4 安装MMDeploy SDK依赖 2 5 安装推理引擎 2 6 设置PATH 2 7 编译安装依赖库 3
  • EleAtt-RNN: Adding Attentiveness to Neurons in Recurrent Neural Networks

    EleAtt RNN Adding Attentiveness to Neurons in Recurrent Neural Networks EleAtt RNN 在循环神经网络的神经元当中加入注意力 1 创新点 现在研究者研究RNN 把
  • 关于JAVA输入输出流造成的Runtime线程阻塞问题【新人笔记】

    萌新最近搬砖遇到一个问题 上面让我做一个dump文件的自动解析系统 至于解析的工具 准备用的是google的breakpad 项目部署环境是linux jdk1 8 其他的无关紧要也就不谈了 一开始写了一个demo放到测试机上面跑 最初代码
  • 数字IC手撕代码-握手信号(READY-VALID)

    前言 本专栏旨在记录高频笔面试手撕代码题 以备数字前端秋招 本专栏所有文章提供原理分析 代码及波形 所有代码均经过本人验证 目录如下 1 数字IC手撕代码 分频器 任意偶数分频 2 数字IC手撕代码 分频器 任意奇数分频 3 数字IC手撕代
  • 微信公众号开发 微信支付 本地联调jssdk 提示系统错误,错误码:63002,invalid signature

    需求 公众号网页调用微信js sdk完成微信支付 遇到的问题 无法在本地进行联调 通过微信的官方文档可以看到要在项目里调 微信的api首先是需要在公众号设置里绑定安全域名的 然后需要将当前网页的URL 不包含 及其后面部分 传给后台生产wx
  • nginx+keepalived高可用详解配置

    Keepalived简介 Keepalived是Linux下一个轻量级别的高可用解决方案 高可用 广义来讲 是指整个系统的高可用行 狭义的来讲就是主机的冗余和接管 它与HeartBeat实现类似的功能 都可以实现服务或者网络的高可用 但是又
  • QT遇到的一些坑 信号槽 多线程 GBK

    1 信号槽 想使用信号槽 需要继承public QWidget类 并在类中定义宏Q OBJECT 2 GBK编码 QT的中文是UTF8编码且会自动把gbk编码转换成utf8编码 3 多线程 QT的线程是异步模型 需要把socket传到线程中
  • 更常用的BRDF--------Phong光照方程

    Phong光照方程 相对于物理的BRDF使用较多的反射计算方程为Phone光照方程如下 其中v是从表面点p到视点的向量 r是光线l对法线n的反射光线 mshi是参数因子用于不同材质的不同反射强度 如下图 由公式可知向量r和向量v越接近反射亮
  • 【Flutter 1-5】运行Flutter的第一个项目——计数器

    创建项目 创建Flutter项目有很多种方法 各个IDE工具也都集成了创建Flutter项目的快捷操作 我们这里列举三种方式 使用命令行创建 使用Android Studio创建和使用VSCode创建 文章首发地址 使用命令行创建 在Flu
  • vue --echarts

    x轴文字横向竖着排列 xAxis type category boundaryGap true nameGap 30 splitArea show false axisLabel show true interval 0 formatter
  • RunnerGo:轻量级、全栈式、易用性和高效性的测试工具

    随着软件测试的重要性日益凸显 市场上的测试工具也日益丰富 RunnerGo作为一款基于Go语言研发的开源测试平台 以其轻量级 全栈式 易用性和高效性的特点 在测试工具市场中逐渐脱颖而出 RunnerGo是一款轻量级的测试工具 使用Go语言研
  • @FeignClient 注解的使用与常见问题

    概述 Feign 是一个声明式的 Web 服务 通过定义一个添加相应注解的接口 即可完成一个 Web 服务的接口 SpringCloud 对 Feign 进行了封装以后 其开始能够支持 Spring MVC 标准注解 同时在 SpringC
  • 有序数组合并

    数组合并是归并排序中的一个步骤 今单独就两个有序数组的合并给出代码实现 归并排序的另一个步骤就是递归 递归就是一个方法在其方法体的某个地方调用自己 这样就会将同一个逻辑不断的压栈 到达递归条件后 又一层层地出栈 直到所有方法被压栈的部分都被
  • ARGB与RGB、RGBA的区别

    ARGB 是一种色彩模式 也就是RGB色彩模式附加上Alpha 透明度 通道 常见于32位位图的存储结构 RGB 色彩模式是工业界的一种颜色标准 是通过对红 R 绿 G 蓝 B 三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的
  • HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc....Possibly consider using a shorter

    今天使用springboot遇到了这样的问题 springboot项目启动开始可以访问数据库 但是几分钟之后就会报错 idea报错信息 HikariPool 1 Failed to validate connection com mysql
  • 【技术分享】开启机器学习之旅的8个推荐Python库

    机器学习是当今的热门话题之一 Python 是众多用户中排名第一的编程语言 然而 Python 是一种通用编程语言 这意味着它被用于许多不同的领域 要使用 Python 进行机器学习 除了通用Python之外 您还需要学习一些额外的 Pyt
  • SSH和SSM对比总结

    Java开发之路 2016 10 18 11 19 当下流行的两种企业开发MVC开源框架 是我们Java程序猿必备知识能力 MVC 即模型 model 视图 view 控制器 controller 的缩写 一种软件设计典范 用一种业务逻辑