Hibernate面试题
作者:互联网
1.什么是Hibernate
hibernate是一种轻量级的orm的实现,是对jdbc的一种封装;
Orm是对象关系映射(Object Relational Mapping)的缩写。
2.什么是POJO
POJO(Plain Ordinary Java Object)是简单地Java对象,是普通的JavaBeans。
3.Hibernate开发流程
1.配置hibernate.cfg.xml,里面包含数据库连接信息,哪些HBM,是否显示二级缓存、SQL语句、方言等;
2.配置HBM档,大概是哪个类对应哪张表、属性对应什么字段、各种关系映射;
3.使用hibernate,通过Configuration拿到SessionFactory,接着拿到Session,然后进行一系列数据库相关的业务操作。
4.get与load的区别
通过ID获取对象方式有两种:分别是get和load,他们的区别在于
- 延迟加载
- 对于ID不存在的时候的处理
5. 常见三种查询方式
分别是HQL、 Criteria、标准SQL
6. 三种状态
实体类对象在hibernate中有三种状态
分别是瞬时、持久、脱管;
瞬时——指的是没有和hibernate发生任何关系 ,在数据中也没有对应的记录,一旦JVM结束这个对象也就消失;
持久——指的是一个对象和hibernate发生联系,有对应的Session并且数据库中有对应的一条记录;
脱管——指的是一个对象虽然在数据库中有对应的一条记录,但是它所对应的Session已经关闭了。
代码演示参考:Hibernate对象的三种状态
7. OpenSession与GetCurrentSession的区别
Hibernate有两种方式获得Session分别是:
OpenSession和getCurrentSession
它们区别在于
- 获取的是否是同一个session对象
OpenSession每次都会得到一个新的session对象,getCurrentSession在同一个线程中,每次都是获取相同的session对象,但是在不同的线程中获取的是不同的Session对象;
- 事务提交的必要性
OpenSession只有在增加、删除、修改的时候需要事务,查询时不需要,getCurrentSession是所有操作都必须放在事务中进行,并且提交事务后Session就自动关闭。
代码演示参考 OpenSession与GetCurrentSession的区别
8. 一级缓存
Hibernate默认开启是一级缓存的,一级缓存存放在Session上
代码演示参考 Hibernate一级缓存
9. 二级缓存如何配置
Hibernate的一级缓存是在Session上,二级缓存是在SessionFactory上
配置方式:
要在hibernate.cfg.xml中开启
代码演示参考 Hibernate二级缓存
标签:面试题,Hibernate,OpenSession,对象,缓存,hibernate,Session 来源: https://www.cnblogs.com/shiyuebuhei/p/11575449.html