欢迎来到天天文库
浏览记录
ID:55631514
大小:117.50 KB
页数:36页
时间:2020-05-21
《Hibernate面试题部分汇总集合.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Hibernate常见的面试问题Hibernate1.Hibernate简介?Hibernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用面向对象编程思想来操纵数据库。 2.Hibernate工作原理?及为什么要用?Hibernate是一个JDO工具。它的工作原理是通过文件把值对象和数据库表之间建立起一个映射关系,这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。1)对JDBC操作提供封装,方便操作简化数据库访问的代码,使用面
2、向对象的方式操作DAO;2)简化DAO层的代码量ORM从关系型DB到面向对象(java)的转变;3)在java代码中充斥着大量的sql语句不便于维护,但是ORM映射可以减少此类代码,便于维护;3.Hibernate的优点和缺点?⑴Hibernate的优点:1).Hibernate使用Java反射机制,而不是字节码增强程序来实现透明性;2).Hibernate的性能非常好,因为它是一个轻量级框架。映射的灵活性很出色;3).它支持多种关系数据库,从一对一到多对多的各种复杂关系;(2)Hibernate的缺点:它限制您所使用的对象模型,如一个持
3、久性类不能映射到多个表,其独有的界面和可怜的市场份额也让人不安。4.Hibernate的缓存机制?Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,SessionFactory的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFact
4、ory不需要进行内置缓存与映射文件的同步。SessionFactory的外置缓存是一个可配置的插件。在默认情况下,SessionFactory不会启用这个插件。SessionFactory的外置缓存也被称为Hibernate的第二级缓存。事务范围的缓存是持久化层的第一级缓存;进程范围和集群范围的缓存是持久化层的第二级缓存。Hibernate还为查询结果提供了一个查询缓存,它依赖于二级缓存。持久化层可以提供多种范围的缓存。如果在事务范围的缓存中没有查到相应的数据,还可以到进程范围或集群范围的缓存内查询,如果还是没有查到,那么只有到数据库中查
5、询。事务范围的缓存是持久化层的第一级缓存,通常它是必需的;进程范围或集群范围的缓存是持久化层的第二级缓存,通常是可选的。什么样的数据适合放到二级缓存中?1)很少被修改的数据;2)不是很重要的数据;3)不会被并发访问的数据;4)参考数据。不适合放到二级缓存中的数据?1)经常被修改的数据;2)绝对重要的数据,例如:财务数据;3)共享数据。其它:·处于一级缓存中的对象永远不会过期,除非应用程序显式清空缓存或者清除特定的对象必须提供数据过期策略;·只要应用程序通过Session接口执行保存、更新、删除、加载和查询数据库数据的操作,Hibernat
6、e就会启用第一级缓存,把数据库中的数据以对象的形式拷贝到缓存中,对于批量更新和批量删除操作,如果不希望启用第一级缓存,可以绕过HibernateAPI,直接通过JDBC API来执行指操作。用户可以在单个类或类的单个集合的粒度上配置第二级缓存。如果类的实例被经常读但很少被修改,就可以考虑使用第二级缓存。只有为某个类或集合配置了第二级缓存,Hibernate在运行时才会把它的实例加入到第二级缓存中。我的理解:Hibernate中的一级缓存是出于Hibernate自身的需要而进行的一次数据缓存,可以在Hibernate中的一般操作中起到数据缓
7、存的作用。而通常所说的缓存技术,实际上对应的就是Hibernate中的二级缓存,只不过在Hibernate中,已经有了Session级别的一级缓存,所以称之为二级缓存。缓存的管理:一级缓存的管理Session为应用程序提供了两个管理缓存的方法:1>.Evict(Objectobj):从缓存中清除参数指定的持久化对象;2>.Clear():清空缓存中所有持久化对象。二级缓存的管理:Hibernate的二级缓存策略的一般过程如下:1)条件查询的时候,总是发出一条select*fromtable_namewhere….(选择所有字段)这样的SQ
8、L语句查询数据库,一次获得所有的数据对象。2)把获得的所有数据对象根据ID放入到第二级缓存中。3)当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果
此文档下载收益归作者所有