Hibernate是一个开放源代码的对象关系映射框架,从今天开始我将会和大家一起谈论Hibernate,我会从简单到复杂慢慢进行解剖,话不说多了,马上上我们来进入Hibernate的学习吧:
Hibernate是一个开放源代码的对象关系映射框架,对JDBC实现了非常轻量级的对象封装,一下列出了Hibernate的六大核心接口:
Session SessionFactory Transaction Query Criteria Configuration
Session/SessionFactory/Configuration
Session接口负责执行被持久化对象的CRUD操作(CRUD是完全与数据库的交流)session对象是非线程安全的
SessionFactory负责初始化Hibernate,它充当数据存储源的代理,并负责创建session对象
Configuration接口负责配置并启动Hibernate,创建SessionFactory对象,在Hibernate的启动的过程中,configuration类的实例首先定位映射文档位置,读取配置,然后创建sessionFactory对象
Transaction负责事务处理操作
Query和Crierial负责执行各种数据库操作,并可以使用HQL和SQL语句两种方式
Hibernate的缓存管理
Hibernate提供了两级cache,第一级别的缓存是Session级别缓存,由Hibernate管理
第二级别缓存是SessionFactory缓存,它属于进程或者集群范围的缓存,可以配置和更改,动态加载 和卸载
注意:hibernate还提供了一个查询缓存,但是这个缓存是依赖于二级缓存的
一级缓存管理
当应用程序调用Session的save(),update(),saveOrUpdate() ,get() or load(),以及调用查询接口list() 或则iterate(),或filter()方法时,如果在session中还不存在想对于的对象,那么Hibernate就会把该对象加入到一级缓存之中,当清理缓存时hibernate会将数据同步到数据库中
两个管理缓存的方法:evict(Object obj)从缓存中清除参数指定的对象
clear() 清空所有持久化对象
二级缓存管理
hibernate二级缓存的过程一般策略如下
1.条件查询的时候总是发出一条select * from table_name where ....一次获取所有的数据对象
2. 把所有数据对象根据ID放入到二级缓存
3。当Hibernate根据Id查询数据对象时,首先会从Session级别缓存中查询,如果查询不到,如果配置了二级缓存,那么就会去二级缓存中查询,如果再查不到,那么就会去数据中查询,将查询的结构根据Id放入到缓存中
4.删除,更新,增加数据的时候,同时更新缓存,hibernate二级缓存策略是针对于Id查询缓存的策略,对应条件查询毫无作用,为此hibernate提供了对于条件查询的Query Cache
二级缓存设置
1.什么样的数据存放在二级缓存中?
1.很少被修改的数据 2,不是很重要的数据,允许出现并发的数据
3.不会被并非访问的数据 4.供应者参考的常量数据,实例数据有限,实例很少或者从来不会被修改
2.不适合存放在二级缓存的数据?
1.经常被修改的数据 2.财务数据,绝对不允许出现并发的数据 3 与其它应用共享的数据
Hibernate与延迟加载
Hibernate关系映射提供延迟与非延迟的初始化
非延迟加载
在读取一个对象的时候会将这个对象所有相关的其它对象一起读取出来
延迟加载
这种初始化策略只在一个对象调用一对多或多对多的关系时才将关系对象读取出来
今天主要对Hibernate的缓存和一些机制做了简单的了解和介绍,下次我将对Hibernate的性能优化进行深度的解析