核心接口
1 Configuration接口负责配置并启动Hibernate,创建SessionFactory对象
2 SessionFactory接口负责初始化Hibernate。它充当数据存储源的代理,并负责创建Session对象。这里用到了工厂模式。
3 Session接口负责执行被持久化对象的CRUD操作,Session对象是非线程安全的。Hibernate的session不同于JSP应用中的HttpSession,将HttpSession对象称为用户session。所谓轻量级是指它的创建和销毁不需要消耗太多的资源。
4 Transaction接口:Transaction接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码
5 Query 进行复杂的查询,SQL,HQL.
6 Criteria 面向对象的思路去查询。
事物
1 原子性 要么执行,要么全都不执行
2 一致性 事物完成时,所有数据保持一致状态
3 隔离性 并发的修改,必须与任何其他事物修改隔离
4 持久性 完成后,影响是永久的。
悲观锁
在整个数据处理过程中,将数据处于锁定状态。悲观锁的实现,往往依靠数据库提供的锁机制。 如银行提款机
乐观锁
乐观锁大多数基于数据版本记录机制(version)实现,一般是在数据库表中加入一个version字段,读取数据
时将版本号一同读出,之后更新数据时版本号加一,如果提交数据时版本号小于或等于数据表中的版本号,则认
为数据是过期的,否则给予更新。
一级缓存
第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预。
Session为应用程序提供了两个管理缓存的方法: evict(Object obj):从缓存中清除参数指定的持久化对象。 clear():清空缓存中
所有持久化对象。
二级缓存
第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。
删除、更新、增加数据的时候,同时更新缓存
把获得的所有数据对象根据ID放入到第二级缓存中
当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查;查不到,如果配置了二级缓存,那么从二级缓存中查;查不到
,再查询数据库,把结果按照ID放入到缓存。
Web层延迟加载(大数据,提高性能)
Spring框架为Hibernate延迟加载。Spring提供了OpenSessionInViewFilter和OpenSessionInViewInt
erceptor。
性能优化
HQL 优化
API
数据库设计
降低关联的复杂性
尽量不使用联合主键
hibernate优点:
1、封装了jdbc,简化了很多重复性代码。
2、简化了DAO层编码工作,使开发更对象化了。
3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。
4、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。所以说它是一个轻量级框
架。
参考资料
http://www.cnblogs.com/otomedaybreak/archive/2012/01/27/2330008.htmlhttp://skyuck.iteye.com/blog/486167