SSM 框架集-01-详细介绍-入门问题篇

SSM 框架集-01-详细介绍-入门问题篇

刚开始了解 SSM,首先先解决几个基础问题

1.什么是 SSM 框架集?

  • SSM(Spring+SpringMVC+MyBatis)框架集由 Spring、MyBatis 两个个开源框架整合而成(SpringMVC 是 Spring 中的部分内容)。常作为数据源较简单的 web 项目的框架。
  • SSM 是标准的 MVC 模式,将整个系统划分为表现层,controller层,service层,DAO层四层。使用 spring MVC 负责请求的转发和视图管理。spring实现业务对象管理,mybatis 作为数据对象的持久化引擎。
  • 如果新手刚开始可能不知道从什么开始学,首先明白学习大的两部分 spring,mybatis ,建议先学习 spring,可以到 W3cschool Spring 教程,然后再学习 mybatis,可以在 mybatis 官网文档 学习。然后我也会一直在博客更新学习笔记,一起学习吧

2.什么是 Spring?

  • Spring是一个开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是用于简化企业级应用程序开发。应用程序是由一组相互协作的对象组成。而在传统应用程序开发中,一个完整的应用是由一组相互协作的对象组成。所以开发一个应用除了要开发业务逻辑之外,最多的是关注如何使这些对象协作来完成所需功能,而且要低耦合、高内聚。业务逻辑开发是不可避免的,那如果有个框架出来帮我们来创建对象及管理这些对象之间的依赖关系。可能有人说了,比如“抽象工厂、工厂方法设计模式”不也可以帮我们创建对象,“生成器模式”帮我们处理对象间的依赖关系,不也能完成这些功能吗?可是这些又需要我们创建另一些工厂类、生成器类,我们又要而外管理这些类,增加了我们的负担,如果能有种通过配置方式来创建对象,管理对象之间依赖关系,我们不需要通过工厂和生成器来创建及管理对象之间的依赖关系,这样我们是不是减少了许多工作,加速了开发,能节省出很多时间来干其他事。Spring框架刚出来时主要就是来完成这个功能。
  • Spring框架除了帮我们管理对象及其依赖关系,还提供像通用日志记录、性能统计、安全控制、异常处理等面向切面的能力,还能帮我管理最头疼的数据库事务,本身提供了一套简单的JDBC访问实现,提供与第三方数据访问框架集成(如Hibernate、JPA),与各种Java EE技术整合(如Java Mail、任务调度等等),提供一套自己的web层框架Spring MVC、而且还能非常简单的与第三方web框架集成。从这里我们可以认为Spring是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力,从而使我们可以更自由的选择到底使用什么技术进行开发。而且不管是JAVA
    SE(C/S架构)应用程序还是JAVA EE(B/S架构)应用程序都可以使用这个平台进行开发。让我们来深入看一下Spring到底能帮我们做些什么?

3.Spring能帮我们做什么?

Spring除了不能帮我们写业务逻辑,其余的几乎什么都能帮助我们简化开发:

  • (1) 传统程序开发,创建对象及组装对象间依赖关系由我们在程序内部进行控制,这样会加大各个对象间的耦合,如果我们要修改对象间的依赖关系就必须修改源代码,重新编译、部署;而如果采用Spring,则由Spring根据配置文件来进行创建及组装对象间依赖关系,只需要改配置文件即可,无需重新编译。所以,Spring能帮我们根据配置文件创建及组装对象之间的依赖关系。
  • (2) 当我们要进行一些日志记录、权限控制、性能统计等时,在传统应用程序当中我们可能在需要的对象或方法中进行,而且比如权限控制、性能统计大部分是重复的,这样代码中就存在大量重复代码,即使有人说我把通用部分提取出来,那必然存在调用还是存在重复,像性能统计我们可能只是在必要时才进行,在诊断完毕后要删除这些代码;还有日志记录,比如记录一些方法访问日志、数据访问日志等等,这些都会渗透到各个要访问方法中;还有权限控制,必须在方法执行开始进行审核,想想这些是多么可怕而且是多么无聊的工作。如果采用Spring,这些日志记录、权限控制、性能统计从业务逻辑中分离出来,通过Spring支持的面向切面编程,在需要这些功能的地方动态添加这些功能,无需渗透到各个需要的方法或对象中;有人可能说了,我们可以使用“代理设计模式”或“包装器设计模式”,你可以使用这些,但还是需要通过编程方式来创建代理对象,还是要耦合这些代理对象,而采用Spring 面向切面编程能提供一种更好的方式来完成上述功能,一般通过配置方式,而且不需要在现有代码中添加任何额外代码,现有代码专注业务逻辑。所以,Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
  • (3) 在传统应用程序当中,我们如何来完成数据库事务管理?需要一系列“获取连接,执行SQL,提交或回滚事务,关闭连接”,而且还要保证在最后一定要关闭连接,多么可怕的事情,而且也很无聊;如果采用Spring,我们只需获取连接,执行SQL,其他的都交给Spring来管理了,简单吧。所以,Spring能非常简单的帮我们管理数据库事务。
  • (4) Spring还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板,来方便数据库访问。
  • (5) Spring还提供与第三方Web(如Struts、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
  • (6) Spring能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。
  • Spring能帮我们做这么多事情,提供这么多功能和与那么多主流技术整合,而且是帮我们做了开发中比较头疼和困难的事情,那可能有人会问,难道只有Spring这一个框架,没有其他选择?当然有,比如EJB需要依赖应用服务器、开发效率低、在开发中小型项目是宰鸡拿牛刀,虽然发展到现在EJB比较好用了,但还是比较笨重还需要依赖应用服务器等。

4.什么是 SpringMVC?

  • SpringMVC 是 Spring 中的部分内容,SpringMVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
  • 很多应用程序的问题在于处理业务数据的对象和显示业务数据的视图之间存在紧密耦合,通常,更新业务对象的命令都是从视图本身发起的,使视图对任何业务对象更改都有高度敏感性。而且,当多个视图依赖于同一个业务对象时是没有灵活性的。
  • SpringMVC 是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发

5.什么是 MyBatis?

  • MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录

6.为什么要用 MyBatis?

  • 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
  • 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。
  • 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
  • 提供映射标签,支持对象与数据库的orm字段关系映射;提供对象关系映射标签,支持对象关系组建维护;提供xml标签,支持编写动态sql。

更多文章链接:SSM 框架集

原文地址:https://www.cnblogs.com/xpwi/p/9765587.html

时间: 2024-08-05 17:18:54

SSM 框架集-01-详细介绍-入门问题篇的相关文章

Struts框架:ActionForward详细介绍

首先,什么是"ActionForward"? ActionForward是 Struts1的核心类之一,其基类仅有4个属性:name / path / redirect / classname.在基于Struts1的Web应用程序开发过程中,Action操作完毕后程序会通过Struts1的配置文件struts-config.xml链接到指定的ActionForward,传到Struts1的核心类ActionServlet,ActionServlet使用 ActionForward提供的

高性能ORM框架XLinq功能详细介绍

之前简单介绍了XLinq的一些功能,有很多功能都没有提到,现在给XLinq加了一些功能,这次把所有功能都介绍一遍. 设计目标 易用性 在使用一个框架的时候 应该没几个人会喜欢写一大堆的配置文件吧 也应该没几个人会喜欢为了完成一个小功能却需要写一大堆代码 这是XLinq开发的首要目标之一,就是尽可能提高易用性 最小配置的情况下仅需要一句连接字符串的配置就可以使用 默认支持的是Sql Server 2008 R2数据库,理论上说也大部分支持了sql server系的其他数据库 高性能 目前针对查询时

开源Java EE框架 JBoss Seam 详细介绍

摘要:JBoss Seam是"Java EE 5.0的一个轻量级的框架".这是什么意思?难道Java EE(Enterprise Edition) 5.0本身不是一套"框架吗"?为什么在官方规范之外,还需要另外一个框架?好吧,我们就将seam看作是本应该被包括在Java EE 5.0中的一个"遗漏的框架"吧.它在Java EE 5.0框架的上层,为所有的在企业Web应用中的组件提供了一个统一的.易于理解的编程模型.它同样使基于状态的应用和业务流程

java多线程之Executor框架线程池详细介绍与ThreadPoolExecutor

Executor框架简介 Executor框架的结构 Executor框架主要由3大部分组成: 任务: 包括被执行的任务需要实现的接口:Runable 接口.Callable接口: 任务的执行: 包括任务执行机制的核心接口Executor,以及继承自Executor的ExecutorService接口.Executor框架有两个关键类实现了ExecutorService接口:ThreadPoolExecutor 和 ScheduledThreadPoolExecutor.ForkJoinPool

Unity shader教程-第二课:Shader的框架和Properties详细介绍

本文首发地址:http://98jy.net/article/17 更多更及时的文章可在上述地址看到 一.Shader的框架 shader由关键字Shader 加上后面的用双引号括起来的字串开始,字串里面可以用上/表示在Inspector中显示出来的分类.整个shader代码都包在这个部分后面的{}中.举例来说,一个典型的shader会是这样 Shader "Name" { } 或者 Shader "Category / Name" { } 二.Shader中的属性

使用Micrisoft.net设计方案 第三章Web表示模式 Web模式集群详细介绍 Intercepting Filter(截取筛选器)

Intercepting Filter(截取筛选器) 我们在建立Web应用程序时需要更多的控制权限,或者需要在Web请求前或后,插入自己的业务逻辑. 如何围绕 Web页面请求来实现公共的预处理和后处理步骤? 有许多方法可以解决此问题,因此您需要考虑这会涉及哪些影响因素和权衡因素: A.常见的做法是,将较低级别的功能(如处理 HTTP 头.Cookie 或字符编码)与应用程序逻辑分离,这样有助于限制更改的扩散. B.许多预处理和后处理任务是所有 Web 页面公共的,应该在中心位置实现这些功能,以避

idea搭建ssm框架(超详细)

一.创建项目 先附上测试的数据库 DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(5) NOT NULL AUTO_INCREMENT, `name` varchar(10) COLLATE utf8_bin DEFAULT NULL, `password` varchar(10) COLLATE utf8_bin DEFAULT NULL, `remark` varchar(50) COLLATE utf8_bin DEF

Maven项目搭建(二):Maven搭建SSM框架

        上一章给大家讲解了如何使用Maven搭建web项目.       这次给大家介绍一下怎么使用Maven搭建SSM框架项目.       首先我们来看一下pom.xml的属性介绍: project: pom的xml根元素. parent:  声明继承. modules:  声明聚合,该值是一个当前POM的相对目录.用户项目的聚合. groupId:  定义当前Maven项目隶属的实际项目. artifactId:  定义实际项目中的一个Maven项目模块,一般为实际项目名称. ve

(数据科学学习手札32)Python中re模块的详细介绍

一.简介 关于正则表达式,我在前一篇(数据科学学习手札31)中已经做了详细介绍,本篇将对Python中自带模块re的常用功能进行总结: re作为Python中专为正则表达式相关功能做出支持的模块,提供了一系列方法来完成几乎全部类型的文本信息的处理工作,下面一一介绍: 二.re.compile() 在前一篇文章中我们使用过这个方法,它通过编译正则表达式参数,来返回一个目标对象的匹配模式,进而提高了正则表达式的效率,主要参数如下: pattern:输入的欲编译正则表达式,需将正则表达式包裹在''内传