Java面试经常问到到Hibernate相关的面试题,今天给大家总结了常见的Hibernate面试题及答案详解@mikechen
Hibernate的理解?
Hibernate是一个ORM框架,Hibernate实现了Java对象与关系数据库记录的映射关系,对JDBC做了轻量级的封装,简化了数据访问层编码。
Hibernate支持各种关系数据库,有了Hibernate就不需要写jdbc代码了,直接调用hibernate的方法就可以了,比如save、get等,简化了操作数据库。
Hibernate的优缺点?
Hibernate优点:
1)对象化:使用时只需要操纵对象,抛弃了数据库中心的思想,完全的面向对象思,比如如:组合,继承,多态等;
2)移植性:对于不同的数据库,开发者只需要使用相同的数据操作即可;
3)效率高:Hibernate提供了大量的封装(这也是它最大的缺点),开发者不需写大量的sql语句,这就极大的提高了开发者的开发效率;
4)缓存机制:Hibernate提供了缓存机制(session缓存,二级缓存,查询缓存),对于那些改动不大且经常使用的数据,可以将它们放到缓存中。
Hibernate缺点:
1)要使用数据库的特定优化机制的时候,不适合用Hibernate
原因是:Hibernate对持久层封装过于完整,导致开发人员无法对SQL进行优化,无法灵活使用JDBC的原生SQL。
2)框架中使用ORM原则,导致配置过于复杂
比如:一旦遇到大型项目,比如300张表以上,配置文件和内容是非常庞大的。
3)Hibernate在批量数据处理时有弱势
比如:对于批量的修改,删除不适合用Hibernate,这也是ORM框架的弱点。
Hibernate的工作原理?
1)读取并解析配置文件;
读取并解析hibernate.cfg.xml配置文件
2)读取并解析映射信息:hibernate.cfg.xml中的读取并解析映射信息;
3)创建SessionFactory;
SessionFactory sf = config.buildSessionFactory();
4)打开Sesssion;
Session session = sf.openSession();
5)创建并启动事务;
Transaction tx = session.beginTransaction();
6)操作数据库,并持久化操作;
persistent operate
7)提交事务;
tx.commit();
8)关闭Session;
9)关闭SesstionFactory
Hibernate核心接口有哪些?
1)Configuration :类负责管理Hibernate的配置信息。数据库配置,驱动类等,Xml文件(hibernate.cfg.xml);
2)SessionFactory(会话工厂) :应用程序从SessionFactory里获得Session(会话)实例。通常情况下,整个应用只有唯一的一个会话工厂;
3)Session(会话): 它代表与数据库之间的一次操作,也称为持久化管理器,因为它是与持久化有关的操作接口,工作完成后,需要关闭;
4)Transaction(事务): 它将应用代码从底层的事务实现中抽象出来,可能是一个JDBC事务或者JTA用户事务或通过对象代理结构(CORBA);
5)Query与Criteria(数据检索);
6)Interceptor(拦截机制)。
Hibernate的数据三种状态?
Hibernate把他所管理的数据划分为三种状态:
1)瞬时的
直接 new 出来的对象,该对象还没被持久化,没保存在数据库中,不受 Session 管理。
2)持久的
当调用 Session 的 save、saveOrupdate、或者:get、load、list 等方法的时候,对象就是持久化状态。
3)游离的
Session 关闭之后对象就是游离状态,当脱管对象被重新关联到session上时,并再次转变成持久对象。
Hibernate有哪几种关系映射?
一种是1对1,一种1对多,一种是多对多。
Hibernate 的缓存机制?
1)一级缓存(Session缓存)
Hibenate中一级缓存,也叫做session的缓存, 只在session范围有效,Session关闭一级缓存失效。
2) 二级缓存(SessionFactory缓存)
二级缓存是基于应用程序的缓存,所有的Session都可以使用,Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架。
如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可,如下所示:
<property name="hibernate.cache.use_second_level_cache">true</property> <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
支持配置第三方的缓存,如:EhCache。
什么内容适合放入二级缓存?
经常被访问、改动不频繁、数量有限。
Hibernate查询数据的方式?
主要分为如下三种:
- hql;
- 条件查询QBC(Query By Criteria);
- 原生sql (通过createSQLQuery建立);
hibernate二级缓存如何失效?
- set use_second_level_cache as false;
- CACHEMODE.IGNORE;
- NOCACHEPROVIDER。
Hibernate是如何延迟加载?
通过设置属性lazy进行设置是否需要懒加载,当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,从而提高了服务器的性能。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》