[s2sh框架]Hibernate知识点

1.Hibernate工作原理和好处

  1. 读取并解析配置文件
  2. 读取并解析映射信息,创建SessionFactory
  3. 打开Sesssion
  4. 创建事务Transation
  5. 持久化操作
  6. 提交事务
  7. 关闭Session
  8. 关闭SesstionFactory

2.Hibernate中的get和load的区别?

这里get和load有两个重要区别:

如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。

load方法可返回没有加载实体数据的代理类实例,而get方法永远返回有实体数据的对象。(对于load和get方法返回类型:好多书中都说:“get方法永远只返回实体类”,实际上并不正确,get方法如果在session缓存中找到了该id对应的对象,如果刚好该对象前面是被代理过的,如被load方法使用过,或者被其他关联对象延迟加载过,那么返回的还是原先的代理对象,而不是实体类对象,如果该代理对象还没有加载实体数据(就是id以外的其他属性数据),那么它会查询二级缓存或者数据库来加载数据,但是返回的还是代理对象,只不过已经加载了实体数据。)

参考:http://blog.csdn.net/lenotang/article/details/2595349

3.Hibernate 缓存机制是怎么样的?

参考1:http://zhidao.baidu.com/link?url=opeRrAyilkZCWxaku0-CKRI0mOm9Qw5NYOQb6EB4Qn1-LE1G3ISCwGgqrxdZQRylhuT6jCGlWDZbRsg-Tl7bra

参考2:http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html

这是面试中经常问到的一个问题,楼主可以按照我的思路回答,准你回答得很完美,首先说下Hibernate缓存的作用(即为什么要用缓存机制),然后再具体说说Hibernate中缓存的分类情况,

最后可以举个具体的例子。

Hibernate缓存的作用:

Hibernate是一个持久层框架,经常访问物理数据库,为了降低应用程序对物理数据源访问的频次,从而提高应用程序的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据

Hibernate缓存分类:

Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存

Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有可选性,必须有的功能,不可以取消session缓存)。由于Session对象的生命周期通常对应一个数据库事务或者一个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必需的,不允许而且事实上也无法卸除。在第一级缓存中,持久化类的每个实例都具有唯一的OID。

Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下,SessionFactory不会启用这个插件。

什么样的数据适合存放到第二级缓存中?   

1 很少被修改的数据   

2 不是很重要的数据,允许出现偶尔并发的数据   

3 不会被并发访问的数据   

4 常量数据   

不适合存放到第二级缓存的数据?   

1经常被修改的数据   

2 .绝对不允许出现并发访问的数据,如财务数据,绝对不允许出现并发   

3 与其他应用共享的数据。

Hibernate查找对象如何应用缓存?

当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;如果都查不到,再查询数据库,把结果按照ID放入到缓存

删除、更新、增加数据的时候,同时更新缓存

Hibernate管理缓存实例

无论何时,我们在管理Hibernate缓存(Managing the caches)时,当你给save()、update()或saveOrUpdate()方法传递一个对象时,或使用load()、 get()、list()、iterate() 或scroll()方法获得一个对象时, 该对象都将被加入到Session的内部缓存中。

当随后flush()方法被调用时,对象的状态会和数据库取得同步。 如果你不希望此同步操作发生,或者你正处理大量对象、需要对有效管理内存时,你可以调用evict() 方法,从一级缓存中去掉这些对象及其集合。

这样从头到尾一说的话,很全很详细,估计面试官对你的印象很好。不过也不要面面俱到,楼主可以挑一些自己懂得的内容说,不是很懂的内容可以省略,免得出漏子。

4.HibernatHibernate的检索方式

①导航对象图检索 ②OID检索 ③HQL检索 ④QBC检索 ⑤本地SQL检索

5.Hibernated对象的三种状态?

1.临时状态

2.持久状态

3.托管状态

参考:http://blog.csdn.net/lenotang/article/details/2596214

时间: 2024-10-17 15:15:27

[s2sh框架]Hibernate知识点的相关文章

S2SH框架集成详解(Struts 2.3.16 + Spring 3.2.6 + Hibernate 3.6.10)

近期集成了一次较新版本的s2sh,出现了不少问题,网上资料也是良莠不齐,有的甚至就是扯淡,简单的把jar包扔进去就以为是集成成功了,在这里整理一下详细的步骤,若哪位有什么不同看法,可以留言,欢迎批评改正. 首先说下集成的环境,Eclipse 4.4,Tomcat 7.0.54,Struts2.3.16,Hibernate3.6.10,Spring3.2.6 相关JAR包已上传至百度云:http://pan.baidu.com/s/1pJluA5l 搭建Struts2框架 1. 创建Java We

s2sh框架整合详细配置-xml方式

s2sh整合之xml方式 说明:本文档所采用的框架版本为:Struts 2.1.8, Sping2.5.5,  Hibernate 3.5.6 1.    需要的jar包: ------------Strut2-----------: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging.jar freemarker-2.3.15.jar ognl-2.7.3.jar struts2-core-2.1.8.1.jar

S2SH框架新手搭建详细过程

S2SH框架整合新手学习总结 第一篇:S2SH框架新手搭建准备工作只都需要导入那些文件 第二篇:S2SH框架新手搭建详细过程 版本信息:Struts2.3+Hibernate4.3.6+Spring4.2.0 三个框架,是需要整合起来可以使用的: 首先是导入必要的包,具体导入哪些文件可以参考我的第一篇博文 (1)导入Struts2包 (2)配置Struts2 新建一个struts.xml文件,默认的位置是项目的src根目录,与你的action等等包是同级的 <?xml version="1

持久层框架hibernate相关概念

hibernate为全自动的持久层框架(framework): 1.作用:把内存中的活跃对象永远的保存在关系型数据库中. 2.O/R/M原理:O-->object 对象,R---> relational关系型数据库,M--->mapping映射 为了解决应用程序中的对象和关系型数据库中的表的不匹配而提出的一个解决方案. 3.新版本hibernate4中怎么得到session工厂从而创建连接对象 Configuration cfg = new Configuration().configu

PHP自定义框架部分知识点小结(一)

PHP自定义框架部分知识点小结(一) 网络上有大量优秀的MVC框架可供使用,但自定义框架并不是为了开发一个全面的.终极的MVC框架解决方案,而是将它看作是一个很好的从内部学习PHP的机会,在此过程中,将会学习面向对象编程和MVC设计模式,并学习到开发中的一些注意事项. Web MVC的流程体现如下图: 一个典型的Web MVC流程: Controller截获用户发出的请求: Controller调用对应的Model: Model调用DAO(基于PDO操作数据库的封装类)完成状态的读写操作: Co

框架Hibernate笔记系列 基础 Session One

标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC来access DB,我们要先连接数据库,然后与数据库交互,然后关闭连接.使用了Hibernate之后,它实现了对JDBC的封装.跟数据库建立连接和关闭连接都由Hibernate来管理,我们只要写交互代码就可以了. 目前,使用mybatis的比较多.原因在于使用Hibernate效率不高.(In t

java 三大框架 hibernate部分知识

1.三层架构    表现层 web层(MVC是一个表现层的设计模型)    业务层 service层    持久层 dao层2.三大框架和三层架构的关系(建议学习三大框架的顺序:先学习hibernate在学习struts2框架,最后学习spring 框架)    hibernate框架:它是一个持久层框架    struts2框架:它是一个表现层框架    spring框架:它是一个综合类框架   hibernate只能操作数据库(跟数据库打交道) 3.现阶段已经掌握的持久层技术    JDBC

Hibernate知识点复习之三

HIbernate知识点复习之三 案例需求描述: 存在着一个客户对应多个联系人的情况,单独在联系人管理模块中对联系人信息进行维护,功能包括: 对联系人信息进行增删改查 表关系分析: 一 概述:数据库中多表之间存在着三种关系:一对一 一对多 多对多 ,这也是系统设计中三种实体关系.二 建表原则1 一对多:在多的一方 创建外键指向一得一方的主键2 多对多:创建一个中间表,中间表里创建至少两个字段作为外键,分别指向多对多双方的主键3 一对一:(1)主键对应:一方主键作为另一方主键(2)唯一外键:一方创

关于s2sh框架关于hibernate懒加载问题的说明和解决方案

首先我们来看下面这个图,解释了一个web程序的一次请求流程! 懒加载异常的说明: 懒加载就是我们在查询一个对象时,它所有的属性是否要被查出来! 如果懒加载开启的话,session在service层就被关闭了,而我们的view如果不需要他的属性的话,那就不会出现懒加载异常,如果需要属性,这时候session已经关闭了所以就会出现懒加载异常,这个时候我们就考虑能否把session放到请求完成之后再进行关闭. 解决: 答案当然是可以,那就是使用过滤器,在请求结束之后将session关闭,在web.xm