说说Hibernate对象的三种状态

Hibernate对象有三种状态,分别是:临时态(Transient)、 持久态(Persistent)、游离态(Detached)。

临时状态:是指从对象通过new语句创建到被持久化之前的状态,此时对象不在Session的缓存中。

处在此状态的对象具备以下特点:

1,不在Session缓存中,不与任何Session实例相关联。

2,在数据库中没有与之对应的记录。

通常在下列情况下对象会进入临时状态:

1,通过new语句创建新对象。

2,执行delete()方法,对于游离状态的对象,delete()方法会将其与数据库中对应的记录删除;而对于持久化状态的对象,delete()方法会将其与数据库中对应的记录删除,并将其在Session缓存中删除。

例如:Object object = new Object();

此时object为临时状态,数据库中没有对应的数据,Session缓存中也没有相关联的实例。

持久化状态:是指对象被持久化到Session对象被销毁之前的状态,此时对象在Session的缓存中。

处在此状态的对象具备以下特点:

1,在Session缓存中,与Session实例相关联。

2,在数据库中有与之对应的记录。

3,Session在清理缓存的时候,会根据持久化对象的属性变化更新数据库。

通常在下列情况下对象会进入临时状态:

1,执行save()或saveOrUpdate()方法,使临时对象转变为持久化对象。

2,执行upda()或saveOrUpdate()方法,使游离对象转变为持久化对象。

3,执行load()或get()方法,返回的对象都是持久化对象。

4,执行find()方法,返回List集合中存放的都是持久化对象。

5,在允许级联保存的情况下,Session在清理缓存时会把与持久化对象关联的临时对象转变为持久化对象。

例如:Session session = factory.openSession();  object.setName("持久化对象"); session.save(object);

此时object对象为持久化对象,Session缓存中有相关联的实例,数据库中有相应的记录。

游离状态:是指从持久化对象的Session对象被销毁到该对象消失之前的状态,此时对象不在Session的缓存中。

处在此状态的对象具备以下特点:

1,不在Session缓存中,不与任何Session实例相关联。

2,在数据库中有与之对应的记录(前提是没有其他Session实例删除该条记录)。

通常在下列情况下对象会进入临时状态:

1,执行close()方法,将Session缓存清空,缓存中的所有持久化对象将转变成游离对象。

2,执行evict()方法,能从缓存中删除一个持久化对象,使之转变成游离对象。

例如:session.close();

此时上文的object对象为游离对象,Session缓存中没有有相关联的实例,数据库中有相应的记录。

三种状态里面,只有持久化状态在Session缓存中有相关联的实例,临时状态跟游离状态都没有。临时状态数据库里没有对应的记录,其他两种可能又记录,也可能没有记录。

引用:http://www.cnblogs.com/liushuijinger/p/3543750.html

 hibernate工作流程
(1)启动Hibernate
(2)构建Configuration实例,初始化实例中的所有变量:
Configuration cfg = Configuration.configure();
(3)加载hibernate.cfg.xml文件至cfg实例所分配的内存
(4)通过hibernate.cfg.xml文件 中格的mapping节点进行配置,并加载.hbm.xml文件至cfg实例中
(5)由cfg实例构建一个SessionFactory实例:
SessionFactory sf = cfg.buildSessionFactory();
(6)由上面得到的sf实例创建Session连接:
Session s = sf.openSession();
(7)由Session实例创建事务操作接口Transaction的一个实例:
Transaction tx = s.beginTransaction();
(8)通过Session接口提供的各种方法操作对数据库的访问
(9)提交数据库操作结果:
tx.commit();
(10)关闭Session连接:
s.close(); 

hibernate与mybatis的区别 性能差异 为什么
hibernate是全自动,他会自动生成所有SQL,调优不太方便,它的主要思想是orm,对象关系映射
mybatis是半自动,它需要配置SQL和resultmap,调优方便,它的主要思想是sqlmapping
hibernate有更好的数据库移植性,而且二级缓存优于ibatis
不考虑缓存的情况 hibernate的性能高于ibatis

Struts2工作原理
  在Struts2框架中的处理大概分为以下几个步骤 
  1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
  2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 
  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的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper 
Struts2工作流程
  1、客户端浏览器发出HTTP请求.
  2、根据web.xml配置,该请求被FilterDispatcher接收
  3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton
  4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
  5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面
  6、返回HTTP响应到客户端浏览器 

spring Mvc和struts的区别 性能差异 为什么
mvc开发效率高,mvc配置方便于struts
struts是类级别拦截,一个类对应一个request上下文,mvc是方法级别拦截,一个方法对应一个request上下文,mvc更容易实现restful
mvc设计思路:将整个处理流程规范化,将每个不同的请求分发到不同的组件,设计清晰,直观

mvc性能更好,struts使用标签库,ognl,值栈等功能会降低struts的性能,而且,struts会把每个请求封装到map里以供action使用,保证线程安全.

解释AOP
aop面向切面编程,是oop的重要补充,可以在不修改原有业务逻辑的前提下,加入一些公共的模块,比如日志,权限验证,事物管理。
可以通过编程式或注解式的方式实现。
aop主要通过jdk反射机制和cglib类和包实现,具体看目标类的类型,如果是接口,则使用jdk反射机制的方式。 
解释IOC
ioc本身是一种设计思想,通过ioc容器可以很轻易的得到我们想要的对象或实例,它会自动注入值生成对象,这就是一种控制反转。
ioc最重要的一点就是在程序运行的时候可以动态的向某个对象提供所它依赖对象的实例。这就是通过依赖注入实现的。
依赖注入就是通过反射机制实现的,反射机制可以在程序运行的时候,得到一个对象所属的类,得到一个类的成员变量和方法,动态的创建类对象,动态的调用对象的方法。
具体实现就是参考XMLbeanfactory,classpathXMLapplicationcontext,applicationcontext除了提供基本的ioc功能外,还提供国际化,jndi,外部应用事件 
解释rmi
rmi包括客户端和服务端,他是通过tcp/ip加端口的方式访问,
客户端主要通过rmiproxyfactorybean对客户端进行封装,生成代理对象,查询得到Rmi的stub对象,并通过stub对象发起相应的远程调用请求。
服务端主要是通过rmiserviceexport导出远程调用对象的引用,同时将导出的对象同注册器绑定供客户端查询。 
 ioc aop优缺点
IOC是解耦,提供一种构造对象的方式,使得一种功能能有多种实现,且不构成依赖。spring 的IOC的缺点:占用内存多、构造对象慢、启动慢。
springAOP是提供一种基于spring框架的切面编程企业级解决方案,虽然这个已经很强大,但是依然还是没有aspectj强大,比如:目前还不支持流程切面。织入慢执行效率低、不支持new关键字创建的对象的切入,必须使用bean factory织入。 
spring事物应用
应用场景,如何使用
spring上下文
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 
 AOP原理

Spring提供了两种方式来生成代理对象: JDKProxy和Cglib,具体使用哪种方式生成由AopProxyFactory根据AdvisedSupport对象的配置来决定。默认的策略是如果目标类是接口,则使用JDK动态代理技术,否则使用Cglib来生成代理。下面我们来研究一下Spring如何使用JDK来生成代理对象,具体的生成代码放在JdkDynamicAopProxy这个类中
配置可以通过xml文件来进行,大概有四种方式:
1.        配置ProxyFactoryBean,显式地设置advisors, advice, target等
2.        配置AutoProxyCreator,这种方式下,还是如以前一样使用定义的bean,但是从容器中获得的其实已经是代理对象
3.        通过<aop:config>来配置
4.        通过<aop: aspectj-autoproxy>来配置,使用AspectJ的注解来标识通知及切入点

下面的问题是,代理对象生成了,那切面是如何织入的?
我们知道InvocationHandler是JDK动态代理的核心,生成的代理对象的方法调用都会委托到InvocationHandler.invoke()方法。而通过JdkDynamicAopProxy的签名我们可以看到这个类其实也实现了InvocationHandler,下面我们就通过分析这个类中实现的invoke()方法来具体看下Spring AOP是如何织入切面的。
主流程可以简述为:获取可以应用到此方法上的通知链(Interceptor Chain),如果有,则应用通知,并执行joinpoint; 如果没有,则直接反射执行joinpoint
这个方法执行完成后,Advised中配置能够应用到连接点或者目标类的Advisor全部被转化成了MethodInterceptor.
如果得到的拦截器链为空,则直接反射调用目标方法,否则创建
MethodInvocation,调用其proceed方法,触发拦截器链的执行

转载于:https://www.cnblogs.com/youngjoy/p/4754804.html

java面试总结-(hibernate ibatis struts2 spring)相关推荐

  1. Java面试中常问的Spring方面问题(涵七大方向共55道题,含答案)

    Spring Framework 现在几乎已成为 Java Web 开发的标配框架.那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢?不妨用本文的问题来检测一下. 1.一般 ...

  2. JAVA面试汇总第四章 Spring及数据库相关

    Spring 核心功能演示 + 面试题 Spring Framework 简称 Spring,是 Java 开发中最常用的框架,地位仅次于 Java API,就连近几年比较流行的微服务框架 Sprin ...

  3. Java面试中常问的Spring方面问题

    1.一般问题 1.1. 不同版本的 Spring Framework 有哪些主要功能? VersionFeatureSpring 2.5发布于 2007 年.这是第一个支持注解的版本.Spring 3 ...

  4. java面试要点---Hibernate面试系统知识点复习,hibernate原理,缓冲---随时更新

    1.Hibernate基础 1.1. Hibernate用来做什么 * Hibernate是开源的.用亍封装数据访问层的组件,我们称乊为数据访问层框架(戒持久层框架). 乊前我们通过JDBC/SQL语 ...

  5. java高级框架应用开发案例教程_Java高级框架应用开发案例教程:struts2+spring+hibernate PDF...

    资源名称:Java高级框架应用开发案例教程:struts2+spring+hibernate PDF 第1章 struts+spring+hibernate概述 1.1 框架概述 1.2 struts ...

  6. 【Java EE (Struts2 + Spring + Hibernate)开发】:Struts2(二)之【拦截器机制】

    [Java EE (Struts2 + Spring + Hibernate)开发]:Struts2(二)之[拦截器机制] 本文地址:http://blog.csdn.net/shanglianlm/ ...

  7. Java Web项目源代码|CRM客户关系管理系统项目实战(Struts2+Spring+Hibernate)解析+源代码+教程

    客户关系管理 (CRM) CRM一般指客户关系管理 客户关系管理是指企业为提高核心竞争力,利用相应的信息技术以及互联网技术协调企业与顾客间在销售.营销和服务上的交互,从而提升其管理方式,向客户提供创新 ...

  8. struts2+spring+hibernate

    ---恢复内容开始--- Struts,Spring,Hibernate三大框架 1.Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建Sessio ...

  9. Struts2+Spring+Hibernate的整合

    整体程序结构 1.maven依赖 <!--实现Struts2+Spring+Hibernate的整合 --><dependencies><!--Spring --> ...

最新文章

  1. SpringBoot 之 普通类获取Spring容器中的bean
  2. 云计算与云原生技术系列文章
  3. Redis 10亿数据量只需要100MB内存,为什么这么牛?
  4. tplink 跨路由器 共享打印机_焦作联通案例分享:跨网段通过防火墙共享打印机设置...
  5. 蓝桥杯基础练习之杨辉三角
  6. 算法----字符串拷贝
  7. JQuery1.11版本对prop和attr接口的含义分离导致问题分析
  8. windows安装Composer
  9. [CQOI2016]手机号码
  10. 2019年3月训练记录(3.01~3.23)
  11. JAVA中的I/O流
  12. 计算机网络(第七版)谢希仁
  13. 1. 并行与分布式系统简介
  14. 学习Java8这一篇就够了
  15. linux 实验感悟_linux实验心得
  16. 实验三 类与对象的定义和使用
  17. 《横向领导力》-简述
  18. 【转】javascript实现图片的连续滚动
  19. 基于STM32F407四旋翼无人机---MS5611气压计(三)
  20. Python项目实战:银行信用卡客户流失预测

热门文章

  1. silverlight 类似百度的图片浏览器,视频播放,附件下载功能,全部后台程序。...
  2. EXSI 连接硬件USB pass-through
  3. 两步实现 mysql 远程连接
  4. Bootloader
  5. IT规划中的技术体系架构
  6. Jquery获得控件值的方法
  7. 没有JS的前端:体积更小、速度更快!
  8. 全球首条瓷绝缘子自动化生产线:黏土巧造“瓷器活”
  9. 发掘数据中的信息 -- 数据探索之描述性统计
  10. searcherinder.exe