常用框架

Struts2:

轻量级的MVC框架,主要解决了请求分发的问题,重心在控制层和表现层。低侵入性,与业务代码的耦合度很低。Struts2实现了MVC,并提供了一系列API,采用模式化方式简化业务开发过程。

MVC中的请求分发器,说白了就是前端的控制器即,做一个控制器,用作于浏览器发送请求时候反馈数据的控制器

Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

Struts2的工作流程:

①. 请求发送给StrutsPrepareAndExecuteFilter

②. StrutsPrepareAndExecuteFilter判定该请求是否是一个Struts2请求

③. 若该请求是一个Struts2请求,则StrutsPrepareAndExecuteFilter把请求的处理交给ActionProxy

④. ActionProxy创建一个ActionInvocation的实例,并进行初始化

⑤. ActionInvocation实例在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用

⑥. Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到相对应的返回结果,调用结果的execute方法。

⑦. 执行各个拦截器invocation.invoke()之后的代码

⑧. 把结果发送到客户端

Struts2拦截器和过滤器的区别:

①. 过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器

②. Struts2拦截器只能对Action请求起作用,而过滤器则可以对几乎所有的请求起作用

③. 拦截器可以访问Action上下文(ActionContext),而过滤器不行

④. 在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次

 

Hibernate:

Hibernate是一种ORM框架,全称为 Object_Relative DateBase-Mapping,在Java对象与关系数据库之间建立某种映射,以实现直接存取Java对象

Hibernate的工作原理:

①. 通过Configuration读取并解析hibernate.cfg.xml配置文件

②. 由hibernate.cfg.xml中的<mapping resource>读取并解析映射文件

③. 通过config.buildSessionFactory创建sessionFactory

④. 通过sessionFactory.openSession获取session

⑤. 通过session.beginTransaction开启事务

⑥. 操作数据

⑦. 提交事务

⑧. 关闭session和sessionFactory

Hibernate的优缺点:

优点:

①. 对JDBC访问数据库的代码进行了封装,简化了数据库访问层繁琐的重复性代码

②. 映射的灵活性,它支持各种关系数据库,从一对一到多对多的各种复杂关系

③. 非侵入性、移植性会好

④. 缓存机制:提供一级缓存和二级缓存

缺点:

①. 无法对SQL进行优化

②. 框架中使用ORM原则,导致配置过于复杂

③. 执行效率和原生的JDBC相比偏差:特别是在批量数据处理的时候

④. 不支持批量修改、删除

在Hibernate应用中Java对象的状态有那些:

①. 临时状态(新建状态):不处于session缓存中

②. 持久化状态:加入到session缓冲中

③. 游离状态:已经被持久化,但不在session的缓存中

Hibernate如何延迟加载:

当调用session的load()方法加载实体类时,就会延迟加载

Hibernate的缓存机制:

Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存,当hibernate根据ID访问数据对象时,首先会从session一级缓存中查;查不到,如果配置了二级缓存,则从二级缓存中查;如果都查不到,再查询数据库。

①. 一级缓存:又称为”Session级别缓存”,只存在于session的生命周期中,当session关闭时,该session所管理的一级缓存也会被立即清除。该缓存由Hibernate管理,应用程序无须干预

②. 二级缓存:又称为”SessionFactory级别缓存”,存在于整个应用程序中,一个应用程序对应一个SessionFactory。该缓存可以进行配置和更改,并且可以动态加载和卸载,hibernate为查询结果提供了一个查询缓存,它依赖于二级缓存

Hibernate中getCurrentSession()和openSession()的区别?

①. getCurrentSession()会先查看当前线程中是否绑定了session,如果有则直接返回,如果没有再创建。而openSession()则直接new一个新的session并返回

②. getCurrentSession在事务提交时会自动关闭session,而openSession()需要手动关闭

Hibernate中Load()和get()区别:

①. 从返回结果上对比:get方法检索不到结果的话,返回结果为null;但是load()方法检索不到结果的话,则会出现ObjectNotFoundException异常

②. 从检索机制上对比:load支持延迟加载(懒加载),get不支持延迟加载

 

Spring:

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

IOC:借助于“第三方”实现具有依赖关系的对象之间的解耦。

  • 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由Spring框架来管理。
  • 正控:若要使用某个对象,需要自己去负责对象的创建
  • 反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了Spring框架

DI:Dependency Injection(依赖注入)

  • 指 Spring 创建对象的过程中,将对象依赖属性(简单值,集合,对象)通过配置设值给该对象

AOP:AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果

        AOP能够将那些与业务无关,却为业务模块所共同调用的逻辑或责任(例如事务处理、日志管理、权限控制等)封装起来,便于减少系统的重复代码降低模块间的耦合度,并有利于未来的可拓展性和可维护性

  • 切入点(Pointcut)
    在哪些类,哪些方法上切入(where
  • 通知(Advice)
    在方法执行的什么实际(when:方法前/方法后/方法前后)做什么(what:增强的功能)
  • 切面(Aspect)
    切面 = 切入点 + 通知,通俗点就是:在什么时机,什么地方,做什么增强!
  • 织入(Weaving)
    把切面加入到对象,并创建出代理对象的过程。(由 Spring 来完成)

Spring的注入方式有哪些:

①. setter注入:对于习惯了传统的JavaBean开发的程序员来说,通过setter方法注入属性值是熟悉的、直观的和自然的。如果依赖关系比较复杂,那么构造方法注入方式会导致构造方法相当庞大,此时使用设值方式更为简洁

②. 构造注入:构造方法注入很好的响应了Java设计原则之一,在构造期间即可创建一个完整、合法的对象;避免了繁琐的setter方法的编写,所有的依赖关系均在构造方法中设定,依赖关系集中体现;

③. 接口注入:接口注入因具备侵入性,它要求组件必须与特定的接口相关联,因此这种注入方式基本上已经被遗弃了。

spring的自动装配,自动装配的各种模式:
 

Spring的自动装配:无须在Spring配置文件中描述javabean之间的依赖关系,IOC容器会自动建立JavaBean之间的关联关系。

①. 根据属性名称自动装配autowire=”byName”

②. 根据数据类型自动装配autowire=”byType”

③. 根据构造方法自动装配autowire=”constructor”

 

SpringMVC:

SpringMVC 是类似于 Struts2 的一个 MVC 框架,在实际开发中,接收浏览器的请求响应,对数据进行处理,然后返回页面进行显示。

SpringMVC常用注解:

@Controller

  负责注册一个bean 到spring 上下文中
@RequestMapping

  注解为控制器指定可以处理哪些 URL 请求
@RequestBody

  该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上

@ResponseBody

   该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区

@ModelAttribute    

  在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法

  在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中 

@RequestParam 

  在处理方法入参处使用 @RequestParam 可以把请求参 数传递给请求方法

@PathVariable

  绑定 URL 占位符到入参
@ExceptionHandler

  注解到方法上,出现异常时会执行该方法
@ControllerAdvice

  使一个Contoller成为全局的异常处理类,类中用@ExceptionHandler方法注解的方法可以处理所有Controller发生的异常

MyBatis:

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。

mybatis的缓存机制:
 

MyBatis提供了查询缓存来缓存数据,以提高查询的性能,MyBatis的缓存分为一级缓存和二级缓存。

一级缓存:SqlSession级别的缓存,基于HashMap本地缓存,当同一个sqlSession执行两次相同的SQL语句时,第一次执行完后会将数据库中查询到的结果写到缓存,第二次查询时直接从缓冲中读取不经过数据库了。一级缓存默认时开启的

二级缓存:mapper级别的缓存,也是基于hashmap本地缓存,不同的sqlSession两次执行相同的namespace下的sql语句,第二次查询就不会进行数据库了。

 

Springmvc与struts2区别:

①. SpringMVC的入口是Servlet,而Struts2是Filter

②. SpringMVC会稍微比Struts2快些,SpringMVC是基于方法设计,而Struts2是基于类,每次发一次请求都会实例一个Action

③. SpringMVC使用更加简洁,开发效率SpringMVC比Struts2高,支持JSR303,处理ajax请求更加方便

④. Struts2的OGNL表达式使页面的开发效率相比SpringMVC更高些

 

Hibernate与mybatis区别:

开发效率方面:

①. hibernate开发中,sql语句已经被封装,直接可以使用,加快系统开发(但是对于庞大复杂系统项目来说,负责语句较多,hibernate就不是一个很好的方案)

②. Mybatis属于半自动化,sql需要手工完成,稍微繁琐

SQL优化方面

①. Hibernate自动生成SQL,有些语句较为繁琐,会多消耗一些性能

②. MyBatis手动编写SQL,可以避免不需要的查询,提高系统性能

对象管理方面

①. hibernate是完整的ORM框架,开发过程中,无需过多关注底层实现,只需要管理对象即可

②. MyBatis需要自行管理映射关系

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值