Spring,Struts2,Hibernate,SpringMVC,Mybaties基础

Spring

spring框架是由于软件开发的复杂性而创建的,Spring使用的是基本的JavaBean来完成以前只能由EJB才能完成的事情,然而Spring的用途不仅仅限于服务器端的开发

目的:解决企业开发的复杂性

功能:使用基本的JavaBean代替EJB,并提供更多的企业应用功能

范围:任何java应用

Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架

Spring的基本组成:

1.最完善的轻量级核心框架

2.通用的事务管理抽象层

3.JDBC抽象层

4.集成了Tophink,Hibernate,JDO,iBatis,Sql等

5.AOP功能

6.灵活的MVC Web应用框架

优点:

1.JE22应该更加容易使用

2.面向对象的设计比任何实现技术都重要

3.面向接口编程,而不是针对类编程,Spring将使用接口的复杂度降低到零

4.代码应易于测试

核心容器:

是Spring框架最基础的部分,他提供了依赖注入特征来实现容器对Bean的管理,这里最基础的概念是BeanFactory,它是任何Spring应用的核心,BeanFactory是工厂模式的一个实现,它使用IOC将应用配置和依赖说明从实际应用代码中分离出来

应用上下文模块(Spring Context)

核心模块的BeanFactory使String成为一个容器,而上下文模块使它成为一个框架,这个模块扩展了BeanFactory的概念,增加了对国际消息、事件传播以及验证的支持,另外这个模块提供了很多企业服务,例如:电子邮件,JDNI访问,EJB集成,远程以及时序调度服务,也包括了模板框架,例如:velocity(速度)和FreeMarker集成的支持(模板引擎)

Spring的AOP模块(API应用程序编程接口)

Spring在它的AOP模块中提供了对面向切面编程的丰富支持,这个模块是在Spring应用中实现切面的基础,为了确保Spring与其他AOP框架的互用性,Spring的AOP支持基于AOP联盟定义的API,AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性,通过访问他们的站点,你可以找到关于AOP联盟的更多内容。

JDBC和抽象DAO模块

使用JDBC经常导致大量的重复代码,取得连接,创建语句,处理结果集,然后关闭连接,Spring的JDBC和DAO模块抽取了这些重复的代码,因此可以保证数据库的访问代码干净整洁,并且防止因关闭数据资源失败而引发的问题,另外,还是用了Spring的AOP为Spring应用了的对象提供了事务管理服务。

对象/关系映射集成模块

Web上下文模块建立与应用上下文模块之上,提供了一个适合于Web应用的上下文,另外,模块还提供了一些面向服务支持。

Spring的MVC框架

为构建Web应用提供了一个功能全面的MVC框架,虽然Spring可以很容易与其他MVC框架集成,例如:struts但Spring的MVC框架使用IOC对控制逻辑和业务对象提供了完整的的分离,Spring的MVC框架还可以利用Spring的任何其他服务,例如:国际化信息与验证。

SpringMVC

应用:分离了控制器,模型对象

注解

@controller  声明控制器

@Request Mapping("/")声明URL

@Autowired业务接口注入

在代码上加上注解,可以省去多个配置文件的工作,达到简单的MVC的处理请求响应

Struts2

是基于MVC设计模式的Web应用框架,它的本质上相当于是一个servlet,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2从WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与servletAPI完全脱离开

拦截是AOP的一种实现策略,拦截器是动态拦截Action调用的对象

拦截器的原理:当请求到达Struts2的servletDispatcher时,Struts2会查找配置文件,并配置实例化相对的拦截器对象,然后串成一个列表(List),最后一个一个的调用列表中心的拦截器

出现漏洞:

Struts2曝出两个高危安全漏洞,一个是使用所写的导航参数前缀是的远程代码执行漏洞,另一个是使用缩写的重定向参数前缀是的开放式重定向漏洞,这些漏洞可以使用黑客取得网站的“最高权限”,从而使企业服务器变成黑客手中的“肉鸡”。


Hibernate对象关系映射框架

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将pojo与数据库表建立映射关系,是一个全自动的ORM框架,Hibernate可以自动生成SQL语句,自动执行,使得JAVA程序员可以使用对象编程思想来操控数据库,Hibernate可以应用在任何使用JDBC的场合,既可以在JAVA的客户端程序使用,可以完成数据持久化的重任。

Hibernate的核心API(6个)

Session,SessionFactory,Transaction(事务),Query,Criteria(标准)和Configuration(布局)

通过这些借口,可以对持久化对象进行存取,事务控制

Hibernate主键的创建:

1.自动生成:native

2.手动增加的时候:assigned,identity都代表自增的意思

SQL,MySql都选择identity自增。Oracle使用sequence

hibernate中处于一级缓存中的对象永远不会过期,除非应用程序显示清空缓存或者清除对象必须提供数据过期策略

Hibernate将JAVA对象之间的关系转为数据表之间的关系

Hibernate缓存

一级缓存

当应用程序调用session的save(),update(),saveOrUpdate(),get()或load(),以及调用查询接口的list(),iterate()或filter()方法,当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。Session为应用程序提供了两个管理缓存的方法:clear()清空缓存中所有持久化对象

二级缓存

是针对于ID查询的缓存策略SessionFactory

查询缓存

对于经常使用的查询语句,如果启用了查询语句,当第一次执行查询语句时,Hibernate会将查询结果存储在二级缓存中,以后再次执行该查询语句时,从缓存中获取查询结果,从而提高查询性能。Hibernate的查询缓存主要针对普通属性结果集的缓存,而对于实体对象的结果集只缓存ID;

Hibernate工作原理

1.通过Configuration(),configure(),读取并解析Hibernate,cfg,xml配置文件

2.有Hibernate.cfg.xml中的<mapping resource="com/xx/USER.hbm.xml"/>读取解析映射信息

3.通过config,buildSessionFactory();得到sessionFactory

4.sessionFactory.openSession();得到session

5.session.beginTransation();//开启事务

6.persistent operate;

7.session.getTransaction().commit();//提交事务

8.关闭session;

9.关闭SessionFactory;

Hibernate优点

1.封装了JDBC简化了很多重复代码

2.简化了dao层编码工作,使开发更加对象化

3.移植性好,支持各种数据库

4.支持透明持久化,因为Hibernate操作的是纯粹的java类,没有实现任何接口,没有侵入性,所以说它是一个轻量级的框架

Hibernate延迟加载

get不支持延迟加载,load支持延迟加载(节省内存的开销,从而提高了服务器的性能)

MyBaties

是一个基于SQL映射支持java和.NET的持久层框架,是一个半自动化的“ORM”实现


Spring+Struts2+Hibernate和Spring+SpringMVC+Mybaties异同

(Spring+Struts2+Hibernate将配置文件开发用到极致,Spring+SpringMVC+Mybaties将注解开发用到极致)

SSH通常指的是Struts2做控制器,Spring管理各层的组件,Hibernate负责持久化层

SSM通常是指SpringMVC做控制器。Spring管理各层的组件,Mybaties负责持久化

相同点:

1.Spring依赖注入DI来管理各层的组件

2.使用面向切面编程的AOP管理事务、日志、权限等

不同点:
Struts2和SpringMVC

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

2.Struts2是Action类级别,SpringMVC是方法级别的拦截,拦截一个方法对应一个request上下文,而方法同时又跟一个URL对应,所以说从框架本身上SpringMVC就容易实现restFul的URL,而Struts2其属性却被所有方法共享,这也就无法用注解或者其他方式表示其所属的方法

3.SpringMVC方法基本上是独立的,独享request,response数据,方法之间不共享变量,而Struts方法之间也是独立的,但其所有Action变量是共享的,这不影响程序运行,却给编码,读程序时带来了麻烦,每次的请求都需要创建一个Action,一个Action对象对应一个request上下文

4。由于Struts2需要针对每一个request进行封装,把request,session等servlet生命周期的变量封装成一个个Map,供给每个Action使用,并保证线程的安全,所以在原则上是比较耗费内存的。

5.拦截器实现机制上,Struts2有自己的Interceptor(拦截)机制,SpringMVC用的是独立的AOP方式,这样导致Struts的配置文件量比SpringMVC大

6.SpringMVC开发效率和性能高于Struts2

7.Struts2是通过Filter实现的请求转发(或者说请求的初步处理)和初始化操作,SpringMVC是通过servlet实现的请求转发和初始化

8.SpringMVC集成了Ajax使用非常方便,只需要一个注解@ResponseBody就可以实现,然后直接返回响应文本即可,而Struts2拦截器集成了Ajax,在Action中处理时,一般必须安装插件或者自己写代码集成进去,使用起来相对不方便

9.设计思路上,Struts2更加符合OOP的编程思想,SpringMVC就比较谨慎,在servlet上扩展

Hibernate和MyBaties

Hibernate和Mybaties都支持JDBC和JTA事务处理

Mybaties优势:

MyBaties可以进行更加细致的SQL优化,可以减少查询字段,容易掌握,而Hibernate门槛较高

Hibernate优势:

Hibernate的Dao层开发比Mybaties简单,Mybaties需要维护SQL和结果映射,Hibernate对对象的维护和缓存要比Mybaties好,对增删改查的对象维护要方便,封装性能好,屏蔽了数据库差异,但应对数据库能力较弱,SQL语句优化困难,Mybaties则相反





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值