首页 > 编程知识 正文

SSM的优点,简单介绍ssm

时间:2023-05-03 14:41:12 阅读:282407 作者:1536

浅谈SSM框架 SSM是什么?spring mvcspringMybatis

SSM是什么?

简单介绍一下SSM整体,在之后,我们会对它们进行详细的讲解

让我们感谢每一位框架制作的前辈吧 ❗

SSM,是spring mvc + spring + mybatis 三个框架的简写。说到SSM,就得提到三层架构了。我们的开发架构一般都是基于两种形式,一种是C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器服务器。在JavaEE开发中,几乎全都是基于B/S架构的开发。那么在B/S架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使用的非常多。三层架构中,每一层各司其职,接下来我们就说说每层都负责哪些方面:

表现层:
也就是我们常说的web层。它负责接收客户端请求,向客户端响应结果,通常客户端使用http协议请求web层,web需要接收http请求,完成http响应。
表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。
表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。
表现层的设计一般都使用MVC模型。(MVC是表现层的设计模型,和其他层没有关系)

业务层:
也就是我们常说的service层。它负责业务逻辑处理,和我们开发项目的需求息息相关。web层依赖业务层,但是业务层不依赖web层。
业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的,事务应该放到业务层来控制)

持久层:
也就是我们是常说的dao层。负责数据持久化,包括数据层即数据库和数据访问层,数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行增删改查的。

spring mvc

SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于 Spring FrameWork 的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用 Spring 的Spring MVC 框架或集成其他MVC开发框架,如Struts1(现在一般不用),Xwork、Struts2等。

SpringMVC已经成为目前最主流的 MVC 框架之一,并且随着Spring3.0的发布,全面超越 Struts2,成为最优秀的 MVC 框架。 它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。==同时它还支持RESTful编程风格的请求==。

MVC模型

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,是一种用于设计创建 Web 应用程序表现层的模式。MVC中每个部分各司其职:

Model(模型):

通常指的就是我们的数据模型。作用一般情况下用于封装数据。

View(视图):

通常指的就是我们的jsp或者html。作用一般就是展示数据的。 通常视图是依据模型数据创建的。

Controller(控制器):

是应用程序中处理用户交互的部分。作用一般就是处理程序逻辑的。 它相对于前两个不是很好理解,这里举个例子:

例如:

我们要保存一个用户的信息,该用户信息中包含了姓名,性别,年龄等等。 这时候表单输入要求年龄必须是1~100之间的整数。姓名和性别不能为空。并且把数据填充到模型之中。 此时除了js的校验之外,服务器端也应该有数据准确性的校验,那么校验就是控制器的该做的。 当校验失败后,由控制器负责把错误页面展示给使用者。 如果校验成功,也是控制器负责把数据填充到模型,并且调用业务层实现完整的业务需求。

SpringMVC在三层架构的位置

SpringMVC的优势

1、清晰的角色划分:

==前端控制器(DispatcherServlet)== ==请求到处理器映射器(HandlerMapping)== ==处理器适配器(HandlerAdapter)== ==视图解析器(ViewResolver)== ==处理器或页面控制器(Controller)== 验证器( Validator) 命令对象(Command 请求参数绑定到的对象就叫命令对象) 表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

2、分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要。

3、由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象。

4、和Spring 其他框架无缝集成,是其它Web框架所不具备的。

5、可适配,通过HandlerAdapter可以支持任意的类作为处理器。

6、可定制性,HandlerMapping、ViewResolver等能够非常简单的定制。

7、功能强大的数据验证、格式化、绑定机制。

8、利用Spring提供的Mock对象能够非常简单的进行Web层单元测试。

9、本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

10、强大的JSP标签库,使JSP编写更容易。

………………还有比如RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。

【小结】

1:SpringMVC是什么?

SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于 Spring FrameWork 的后续产品,封装Servlet,简化Servlet的API

2:SpringMVC和三层架构的位置

SpringMVC属于表现层框架

3:SpringMVC的优势(略)

常用注解:
1:@RequestParam注解:请求参数,用于指定参数名称

2:@RequestBody注解:请求体,用于将json数据封装成java类

3:@PathVariable注解:用于获取restful风格的请求参数

4:@RequestHeader注解:获取请求头

5:@CookieValue注解:获取Cookie的值

6:@ModelAttribute注解:用于在跳转请求方法之前,封装实体

7:@SessionAttributes注解:将请求数据存放到Sessioin

spring

Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层Spring MVC和持久层Spring JDBC以及业务层事务管理等众多的企业级应用技术(Spring Data Jpa/Redis/Elasticsearch),还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE企业应用开源框架。

spring的优势
1:方便解耦,简化开发 (工厂模式)

通过Spring提供的IoC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。

2:AOP编程的支持 (jdk动态代理、cglib动态代理)

通过Spring的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。

声明式事务的支持可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理,提高开发效率和质量。

3:方便程序的测试(和Junit整合)

可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。

4:方便集成各种优秀框架

Spring可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Mybatis、Hessian、Quartz、ActivityMQ、Redis等)的直接支持。

5:降低JavaEE API的使用难度 (SSM整合)

Spring对JavaEE API(如JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些API的使用难度大为降低。

Java源码是经典学习范例

Spring的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对Java设计模式灵活运用以及对Java技术的高深造诣。它的源代码无意是Java技术的最佳实践的范例。

spring的体系结构

【小结】

1.什么是spring

面向javaEE/javaSE的一站式的轻量级开源框架

2.两大核心内容

IOC:将对象的创建交给spring管理(IOC),将对象的使用交给spring管理(DI)AOP:面向切面编程,底层实现是动态代理(应用场景:事务处理,缓存,权限)

控制反转-Inversion Of Control

削减计算机程序的耦合(解除我们代码中的依赖关系),将对象的创建和调用都交给spring容器去处理

spring的依赖注入(DI)
依赖注入:Dependency Injection。它是spring框架核心ioc的具体实现。

我们的程序在编写时,通过控制反转,把对象的创建交给了spring,但是代码中不可能出现没有依赖的情况。ioc解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。
简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。 这就是依赖注入。

依赖注入:

能注入的数据:有三类 (1)基本类型和String类型(值的注入) (2)其他bean对象类型(在配置文件中或者注解配置过的bean)(对象的注入) (3)复杂类型/集合类型(集合的注入) 能注入的方式:有三种 (1)第一种:使用构造函数提供 (2)第二种:使用set方法提供(使用p名称空间注入)(用的最多) (3)第三种:使用注解提供

AOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想。

AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码的编写方式(应用场景:例如性能监视、事务管理、安全检查、缓存、日志记录等)。

【扩展了解】AOP 是 OOP(面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构),思想延续 !

AOP作用:

权限校验日志记录性能检测缓存技术事务管理

AOP底层实现
1:JDK代理(要求目标对象面向接口)(spring默认的代理方式是JDK代理)

2:CGLIB代理(面向接口、面向类)

常用注解:
@Component
作用在类上,标记一个普通的JavaBean
@Service
作用在类上,标记业务层JavaBean
@Controller
标记表现层,控制器的声明
@Repository
标记持久层Dao
以上四种实际上是同一类注解
@Autowired
注入
@Configuration
声明当前类是一个配置类,相当于xml中的spring配置
@Bean
声明对当前方法是一个JavaBean,并将此JavaBean交给spring管理
@ComponentScan
用于通过注解指定spring在创建容器时要扫描的包
@Impot
用于导入其他的配置类
@PropertySource
用于指定properties文件的位置
@Aspect
声明一个切面
@Before,@AfterReturning,@AfterThrowing,@After,@Around
定义建言,前置通知,后置通知,异常通知,最重通知,环绕通知
@PointCut
声明切点

Mybatis

Mybatis就是一个持久层的的框架。对JDBC做了轻量级封装

它是基于Java编写的持久层框架,使开发者不必关心传统jdbc的api,只关心sql语句本身。

mybatis 通过 xml或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中 sql的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。

ORM思想对应的框架有:mybatis(半自动),hibernate(全自动),spring data jpa(全自动,底层封装的就是hibernate)
明确:它是一个持久层框架,解决项目对数据库的CRUD操作,只要会方法名、sql语句,学mybatis框架很轻松。

JDBC缺陷总结

1:数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。

2:Sql 语句在代码中硬编码,造成代码不易维护,实际应用 sql 变化的可能较大, sql 变动需要改变java 代码。

3:使用 preparedStatement 向占有位符号传参数存在硬编码,因为 sql 语句的 where 条件不一定,可能多也可能少,修改 sql 还要修改代码,系统不易维护。

4:对结果集解析存在硬编码(查询列名), sql 变化导致解析代码变化,系统不易维护,如果能将数据库记录封装成 pojo 对象解析比较方便。(通过映射,让查询的结果集直接封装到实体类的属性中)

传统模式接口实现类进行开发和代理模式它们做的事情是一样的,区别是,mybatis通过代理模式将我们传统模式要做的实现类操作封装起来了,我们就不需要去实现dao接口。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。