数据持久层框架Hibernate

来源:互联网 发布:用java写一个登陆界面 编辑:程序博客网 时间:2024/05/01 07:08

Hibernate是一种Java语言下的对象关系映射解决方案。它是使用GNU宽通用公共许可证发行的自由、开源的软件。它是面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。Hibernate也是目前Java开发中最为流行的数据库持久层框架。它的设计目标是将软件开发人员从大量相同的数据持久层相关编程工作中解放出来。Hibernate不仅负责从Java类到数据库表的映射,还包括从Java数据类型到SQL数据类型的映射,并且提供了面向对象的数据查询检索机制,极大地缩短了手动处理SQL和JDBC的开发时间。

核心接口和类:

Session接口:该接口负责执行被持久化对象的CRUD<Create、Read、Update、Delete>操作。Session对象,单线程、短生命周期的在应用程序和持久化存储系统之间的一个会话对象,是非线程安全的<一级缓存>。其封装了一个JDBC链接,是一个事务的工厂。

SessionFactory接口:该接口负责初始化Hibernate,是一个线程安全的缓冲区<二级缓存>。它充当数据存储源的代理,负责创建Session对象。在一般情况下,一个项目只需要一个SessionFactory;当需要在一个项目中操作多个数据库时,可以为每个数据库指定一个SessionFactory。

Transaction接口:该接口负责事务相关的操作。它是可选的,开发人员也可以设计编写自己的底层事务处理代码。

Query和Criteria接口:这两个接口负责执行各种数据库查询,它可以使用HQL语言或者原生SQL语句两种表达方式。

Configuration类:该类负责配置并启动Hibernate,创建SessionFactory对象。在Hibernate启动过程中,Configuration类的实例首先定位映射文件位置、读取配置、然后创建SessionFactory对象。

Hibernate常用主键:

Assigned:该方式主键的生成值完全由用户决定,与底层数据库无关。用户需要维护主键值,在调用session.save()之前必须指定主键值,否则会抛出异常。

Identity:与底层数据库有关。有要求数据库支持Identity,如MySQL中的auto_increment,SQL Server中的Identity。Identity无需Hibernate和用户的干涉,使用方便,但是不便于在不同数据库之间的移植。

Native:该方式下主键的生成方式会根据不同的底层数据库自动选择Identity、Sequence、Hilo主键生成方式。因此便于程序移植,项目中如果用到多个数据库时,可以使用这种方式。

Hibernate缓存:

Hibernate提供两级Cache。第一级别的缓存是Session级别的缓存,属于事务范围的缓存。这一级别的缓存由Hibernate管理,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。

当应用程序调用Session的save()、update()、saveOrUpdate()、get()或load(),以及调用查询接口的list()、iterate()或filter()方法时,如果在Session缓存中还不存在相应的对象,Hibernate就会把该对象加入到第一级缓存中。当清理缓存时,Hibernate会根据缓存中对象的状态变化来同步更新数据库。Session为应用程序提供了两个管理缓存的方法:evict(Object  obj)从缓存中清楚参数指定的持久化对象;clear()清空缓存中所有持久化对象。

Hibernate的二级缓存策略是针对ID查询的缓存策略,对于条件查询则毫无作用。为此Hibernate提供了针对条件查询的Query Cache。

     内容摘自相关资料

资源下载http://sourceforge.net/projects/hibernate/