1.为什么使用hibernate框架?
对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
基于JDBC的主流持久性框架,是一个优秀的ORM实现,很大程度上的简化了dao层的编码工作。
使用java的反射机制。
性能好,是一个轻量级框架,映射灵活,支持很多种关系型数据库,从一对一到多对多的各种复杂关系。
2.什么是ORM框架?
ORM(Object Relation Mapping)对象关系映射
通过类与数据库表的映射关系,将对象持久化到数据库中,ORM可以利用对象操纵数据库中的表
常见的ORM框架有Hibernate、Mybatis、EclipseLink、JFinal
3.Hibernate中如何在控制台查看打印的sql语句?
在Hibernate的配置文件中添加配置:hibernate.show_sql=true
4.hibernate有几种查询方式?
HQL,QBC,原生SQL查询
5.hibernate实体类可以被定义为final吗?
可以,但是不推荐。因为Hibernate会使用代理模式在延迟关联的情况下提高性能,如果把实体类定义成final类之后,因为java不允许对final类进行扩展,所以hibernate就无法再使用代理了,从而影响性能。
6.在Hibernate中int和Integer的区别?
如果使用基本类型变量int,如果数据库中对应的存储数据是null,使用PO类进行获取数据会出现类型转换异常。
如果使用的是对象类型Integer则不会报错。
7.Hibernate工作流程
(1)读取并解析配置;
(2)读取并解析映射信息;
(3)创建Session Factory;
(4)打开Session;
(5)创建事务Transaction;
(6)持久化操作;
(7)提交事务;
(8)关闭Session;
(9)关闭Session Factory;
8.get()和load()有什么区别?
get方法被调用时会立即发出SQL语句。
loaad方法被调用时会返回一个目标对象的代理对象,在这个代理对象中只存储了目标对象的ID值,只有当调用除ID值以外的属性时才会发出SQL查询。
9.说一下Hibernate的缓存机制
Hibernate中的缓存分为一级缓存和二级缓存
一级缓存就是Session级别的缓存,从事务范围内有效,内置的不能被卸载。
二级缓存是SessionFactory级别的缓存,从应用启动到应用结束有效,是可选的。默认没有二级缓存,需要手动开启。
10.Hibernate的对象有哪些状态?
Transient(瞬间):对象刚New出来,还没设ID,设了其它值。
Persistent(持久):调用了save()、saveOrUpdate(),就变成了Persistent。
Datached(托管):当session close()完之后,变成了Detached。
11.在Hibernate中getCurrentSession和openSession的区别是什么?
openSession:每次使用都是打开一个新的对象,而且使用完需要调用close方法关闭session。
getCurrentSession:如果已经有session,就使用旧的,如果没有才打开新的session。
一般情况下使用getCurrentSession。
12.Hibernate实体类必须要有无参构造函数吗?为什么?
必须有。因为Hibernate框架会调用这个默认构数方法来构造实例对象。如果没有提供任何构造方法,虚拟机会自动提供默认构造方法,如果开发人员提供了其它有参数的构造方法的话,虚拟机就不会再提供默认构造方法,这时必须手动把无参构造器写出来。