Hibernate

来源:互联网 发布:了凡四训 知乎 编辑:程序博客网 时间:2024/06/05 21:09

一、hibernate五个核心

严谨的来说:(四大接口一个类)

1 .Configuration类的作用是对Hibernate进行配置,以及对它进行启动。(加载 hibernate.cfg.xml)并创建一个SessionFactory对象。

2 .SessionFactory接口

SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建 Session对象。SessionFactory是线程安全的

3 .Session接口

Session(会话)接口是Hibernate应用使用的主要接口。Session接口负责执行被持久化对象的CRUD操作(增删改查)Session对象是非线程安全的。Session相当于jdbcconnection

4 .QueryCriteria接口

总之QueryCriteria接口负责执行各种数据库查询。

5 .Transaction接口

Transaction(事务)负责操作相关的事务。


二、Hibernate的三种状态以及状态的转换

1、Transient(临时)

      new 一个初始化对象后,并没有在数据库里保存数据,处于临时状态;

 

2、Persistent(持久化)

      当执行save()方法,调用session.close()方法之前,内存中的对象与数据库有对应关系处于持久化状态;

3、Detached(托/游离)

   当执行session.close()之后,处于管状态;

状态的转换

在持久化状态下,执行delete()方法后,转换为临时状态;

      处于托管状态下,调用update()方法后,转换为持久化状态;

      在未初始化对象之前,调用get(),load(),find(),iterate()之后,直接进入持久化状态。


三、hibernate缓存概述

hibernate分为一级缓存即session缓存也叫事务级别的缓存以及

二级缓存sessionFactory即应用级别的缓存,还有查询缓存即三级缓存.

一级缓存的生命周期和session的生命周期保持一致,

hibernate默认就启用了一级缓存,

不能将其关闭,可以通过session.clear()session.evict(object)来管理一级缓存。其中get,load,iterate都会使用一级缓存,一级缓存缓存的是对象。

二级缓存的生命周期和sessionFactory的生命周期保持一致,可以跨session,被多个session共享,hibernate3默认开启二级缓存,也可以手动开启并指定缓存插件如ehcache,oscache

等。二级缓存也只能缓存对象。

三级缓存也叫查询缓存,查询缓存是针对普通属性结果集的缓存,

对实体对象的结果集只缓存id。对query.list()起作用,query.iterate不起作用,也就是query.iterate不使用查询缓存