一、Hibernate工作原理流程?
读取并解析配置文件
读取并解析映射信息,创建SessionFactory
打开Session
创建事务Transation
持久化操作
提交事务
关闭Session
关闭SesstionFactory
二、为什么要用Hibernate
对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM(对象关系映射)实现。他很大程度的简化DAO层的编码工作
hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
三、使用Hibernate之前要配置什么
四、相对于SQL,HQL查询语言有什么特点,什么是方言?
sql是关系数据库查询语言,面对的数据库;
hql是Hibernate这样的数据库持久化框架提供的内置查询语言;
虽然他们的目的都是为了从数据库查询需要的数据,但sql操作的是数据库表和字段,而作为面向对象的hql操作的则是持久化类及其属性。
五、Hibernate架构,对象有三种状态,分别是什么,怎样区分?
分别为:瞬时态(Transient)、持久态(Persistent)、脱管态(Detached)。
瞬时对象在内存孤立存在,它是携带信息的载体,不和数据库的数据有任何关联关系,在Hibernate中,可通过session的save()或saveOrUpdate()方法将瞬时对象与数据库相关联,并将数据对应的插入数据库中,此时该瞬时对象转变成持久化对象。
持久对象具有如下特点:
·和session实例关联;
·在数据库中有与之关联的记录。
·比瞬时对象多了一个数据库记录标识值。
托管态,也叫游离态等,持久化对象脱离了Session的对象。如Session缓存被清空的对象。
特点:已经持久化,但不在Session缓存中。处于此状态的对象叫游离对象。
六、Hibernate中什么是延迟加载,延迟的作用是什么?
延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。
七、hibernate进行多表查询每个表中各取几个字段,也就是说查询出来的结果集没有一个实体类与之对应如何解决;
解决方案一,按照Object[]数据取出数据,然后自己组bean
解决方案二,对每个表的bean写构造函数,比如表一要查出field1,field2两个字段,那么有一个构造函数就是Bean(type1 filed1,type2field2),然后在hql里面就可以直接生成这个bean了。
第一个:查询出来的list 转换为一个数组
也就是说 Object[] objects=(Object[])list -- 你查询出来的list 集合
for(object item :objects ){}进行自行封装处理
第二个说白了就是写个构造函数让他自己封装省了自己处理过程了
但是如果是查询出来的多张表数据 还是得按第一种方式自己处理的。
八、简述 Hibernate 和 JDBC 的优缺点?
Hibernate就是封装了JDBC,他可以写一条hql语句,可以再不同数据库中使用,不用修改hql语句,但是关联查询效率低。
JDBC是基础的链接数据库的框架,效率高,但是mysql、oracle、sql service等不同的数据库要写不同的sql语句。
九、介绍一下Hibernate的二级缓存
缓存就是把以前从数据库中查询出来和使用过的对象保存在内存中(一个数据结构中),这个数据结构通常是或类似Hashmap,当以后要使用某个对象时,先查询缓存中是否有这个对象,如果有则使用缓存中的对象,如果没有则去查询数据库,并将查询出来的对象保存在缓存中,以便下次使用。
Hibernate的Session就是一种缓存,我们通常将之称为Hibernate的一级缓存,当想使用session从数据库中查询出一个对象时,Session也是先从自己内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,并将查询的结果保存在自己内部。由于Session代表一次会话过程,一个Session与一个数据库连接相关连,所以Session最好不要长时间保持打开,通常仅用于一个事务当中,在事务结束时就应关闭。并且Session是线程不安全的,被多个线程共享时容易出现问题。通常只有那种全局意义上的缓存才是真正的缓存应用,才有较大的缓存价值,因此,Hibernate的Session这一级缓存的缓存作用并不明显,应用价值不大。Hibernate的二级缓存就是要为Hibernate配置一种全局缓存,让多个线程和多个事务都可以共享这个缓存。我们希望的是一个人使用过,其他人也可以使用,session没有这种效果。
二级缓存是独立于Hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例如,EHCache和OSCache等等。在Hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己的配置文件,最后要配置Hibernate中的哪些实体对象要纳入到二级缓存的管理中。明白了二级缓存原理和有了这个思路后,很容易配置起Hibernate的二级缓存。扩展知识:一个SessionFactory可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数据,当使用Hibernate的二级缓存后,注意不要有其他的应用或SessionFactory来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。
坚持一件事 · 第四十八期
希望每个点赞的你,都能把爱的人揽入怀
领取专属 10元无门槛券
私享最新 技术干货