Hibernate的核心组件,三种状态,常用方法和缓存机制
来源:互联网 发布:exe文件加密网络授权 编辑:程序博客网 时间:2024/05/29 07:10
Hibernate相关知识
1. Hibernate的基本操作
a) Hibernate的作用
i. 映射:hibernate是开源的ORM(Object-Relational Mapping)对象关系映射框架。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作
ii. 持久化:hibernate是一个持久层框架。主要应用是将内存中的对象存储在关系型的数据库中。
b) Hibernate的核心组件
从上图中,我们可以看出Hibernate六大核心接口,两个主要配置文件,以及他们直接的关系。
1、Configuration接口:用来读取Hibernate配置文件,并生成SessionFactory对象。
2、SessionFactory接口:负责初始化Hibernate。它是生成Session的工厂
3、Session接口:负责持久化对象的CRUD(Create,Update,Retrieve,Delete)操作。是Transaction 的工厂,Session对象有一个一级缓存,现实执行Flush之前,所有的持久化操作的数据都在缓存中Session对象处。
4、Transaction接口:负责事务。用来管理Hibernate事务,它主要方法有commit()和rollback(),可以从Session的beginTransaction()方法生成。
5、Query接口:用来对PO进行查询操作。它可以从Session的createQuery()方法生成
注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。
c) Hibernate中对象的三种状态
i. 瞬时态(Transient):也叫临时状态,应用程序中刚new的对象,对象无OID(Object id),没有和session管理,数据库中也没有对应的记录。
ii. 持久态(Persistent):数据库中存在该记录,并且该记录在session已经和对象进行关联,对象有OID,这种类型的对象是持久化对象,处于持久态的对象,如果在session没有关闭之前进行了修改,该修改会自动同步到数据库中去。
iii. 托管态(detached):也叫游离状态,一个对象从数据库中查询出来,session已经关闭,这个时候该对象存在OID(或者说在数据库中有对于记录),但是已经没有session可以管理它了,这种类型的对象叫做托管态对象。
iv.
对以上图形的解析:
1、当一个对象被new了以后此对象处于瞬时态(Transient);
2、然后对此对象执行session的save() 或者saveOrUpdate()方法后,此对象被放入session的一级缓存进入持久态.
3、当再对此对象执行evict()/close()/clear()的操作后此对象进入托管态(Detached)
4、托管态(Detached)和瞬时态(Transient)的对象由于没有被session管理会在适当的时机被java的垃圾回收站(garbage)回收.
5、执行session的get()/load()/find()/iternte()等方法从数据库里查询的到的对象,处于持久态(Persistent).
6、当对数据库中的纪录进行update()/saveOrUpdate()/lock()操作后托管态的对象就过渡到持久态
7、处于持久态(Persistent)与托管态(Detached)的对象在数据库中都有对应的记录.
8、瞬时态(Transient)与托管态(Detached)的对象都可以被回收可是瞬时态的对象在数据库中没有对应的纪录,而托管态的对象在数据库中有对用的纪录。
d) Hibernate中session的常用方法
i. get()方法:get不支持延迟加载,执行get方法之后,马上发出sql语句;get方法要查询的数据在数据库不存在的情况下,返回null;get返回的是真实对象
ii. load()方法:load方法默认情况下是延迟加载,在对象被首次使用的时候才发出sql语句。如果让load方法马上发出sql语句,则需要修改hbm.xml配置。load方法在数据库不存的情况下抛出异常;load返回的是代理对象
iii. save()方法:save使一个临时对象转变为持久化对象。))计划执行一条 insert 语句。
iv. update()方法:update使一个托管对象转变为持久化对象, 并且计划执行一条 update 语句.
v. saveOrUpdate()方法: saveOrUpdate同时包含save和update方法,如果参数是临时对象就用save方法,如果是托管对象就用update方法,如果是持久化对象就直接返回。(如果数据库中有对于id的数据,则执行update;如果没有则执行save)。
vi. delete()方法:delete用来删除持久化对象和瞬时对象,如果传入的对象是持久化数据,那么当清理缓存时,执行delete操作。如果传入的对象是瞬时对象,那么首先会将该对象与session相关联,然后当清理缓存时,再执行delete语句。(delete可以按照id进行删除,待删除对象可以是瞬时态也可以持久态)。
vii. 修改删除的sql都是在事务提交的时候发出的。
e) Hibernate的缓存机制
i. Hibernate的缓存包括Session的缓存和SessionFactory的缓存。
ii. Session的缓存是内置的,不能被卸载,被称为Hibernate的第一级缓存。
1. 一级缓存默认打开,无法取消。Hibernate每次在get,load数据的时候都会以map的形式将查询到的数据放到session缓存中。Session关闭的时候自动刷新以及缓存。一级缓存中的内容在整个session级别共享。
iii. SessionFactory的缓存又可以分为两类:内置缓存和外置缓存,SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的拷贝,SessionFactory不需要进行内置缓存与映射文件的同步。SessionFactory的外置缓存是一个可配置的插件,SessionFactory的外置缓存也被称为Hibernate的第二级缓存。
iv. SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session的一些集合属性包含的数据,
- Hibernate的核心组件,三种状态,常用方法和缓存机制
- Hibernate复习(五)对象的三种状态和缓存机制
- Hibernate中的三种数据持久状态和缓存机制
- 理解Hibernate的Session和缓存机制
- Java三大框架之——Hibernate中的三种数据持久状态和缓存机制
- Hibernate学习笔记(四)----核心开发接口、对象的三种状态、session常用方法
- 有关hibernate相关的延迟加载和缓存机制
- hibernate的session和缓存
- Hibernate对象的三种状态&&Session的常用方法
- MyBatis(三) 事务管理和缓存机制
- Hibernate三种状态和Session常用的方法
- Hibernate三种状态和Session常用的方法
- Hibernate三种状态及常用方法
- 对象的状态和缓存的关系
- Hibernate入门BLOG[十四、Hibernate的懒加载和缓存机制]
- hibernate(实体bean和缓存的问题)
- ListView的显示和缓存机制
- Android的Bitmap和缓存机制
- poj --1125----Stockbroker Grapevine(多源最短路径)
- 自定义声明式redis缓存序列化fang
- OpenStack网络指南(18)负载均衡服务(LBaaS)
- InputStream输入流,读取数据实例
- 【总结】PHP常见面试题汇总(三)
- Hibernate的核心组件,三种状态,常用方法和缓存机制
- MAC将根目录文件夹的权限赋给用户
- C++中一个头文件可以对应多个源文件
- 5.1通信数据转发程序:代理,网关,隧道
- C语言判断两个字符串是否相等
- Android 比ArrayMap更高效的SparseArray
- 数据仓库与传统数据库的比较
- Android运行时权限使用详解(适用于Android 6.0及以上)
- 用实例分析H264 RTP payload(RTSP参数分析)