Hibrnate培训教程

更新时间:2024-05-28 00:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Hibernate培训教程

hibernate简史................................................................................................................... 3

标准方面................................................................................................................... 3 ORM(object relational mapping)................................................................................... 3 成功之道................................................................................................................... 3 何为hibernate............................................................................................................ 4 持久层设计 ...................................................................................................................... 4

持久层概念 ............................................................................................................... 4

ORM(object relational mapper)对象-关系型数据映射组件............................................. 4 设计模式................................................................................................................... 5 资源管理模式............................................................................................................ 5 解藕合设计 ............................................................................................................... 6 体系结构.......................................................................................................................... 6

概况.......................................................................................................................... 6 实例状态................................................................................................................... 8 O/R映射 .......................................................................................................................... 9

basic o/r mapping........................................................................................................ 9 集合类映射 ............................................................................................................. 10 关联关系映射.......................................................................................................... 10 组件映射................................................................................................................. 10 继承映射................................................................................................................. 10 核心接口........................................................................................................................ 10 分类........................................................................................................................ 10 详解.........................................................................................................................11 数据检索........................................................................................................................ 13

Hibernate Query Language (HQL) .............................................................................. 13 Criteria queries (QBC)............................................................................................... 13 Native SQL queries ................................................................................................... 13 开发............................................................................................................................... 13

基本配置................................................................................................................. 14 高级配置................................................................................................................. 15 hibernate最佳实践.......................................................................................................... 15 参考............................................................................................................................... 15

hibernate简史

hibernate是在JDBC之上提供一层薄薄的封装,在提供完全透明的持久化机制的同时又提供尽可能多的灵活性。相比之ibatis则是面向“语句映射”的层面,使用SQL作为查询语言。

标准方面

J2EE提供了两个持久化的手段:JDBC,它是J2SE中访问关系数据库系统的标准API,然而却以一种错误的编程模型来强制开发者用java代码来处理关系思想;另一个是实体Beans ,它是EJB中专门模型化持久化实体的组件,一是不能处理持久对象间的关系,二是使用了糟糕的查询语言,三是难于测试。

ORM(object relational mapping)

由于J2EE持久化标准对于处理对象与关系的尴尬,而且持久化问题的解决方案是由关系-对象映射(ORM)来解决的,它可以透明地持久化普通java对象(POJO)。因此,ORM框架悠然而生。

1990年,一些商业的ORM工具就出现了,比如TopLink。但由于其价格昂贵、结构复杂并且与Sun的实体bean标准相左,所以很少人会用。

2001年,JDO(java data object)在Java Community Progress(www.jcp.org)的规范中出现。因其试图建立一个完整的持久层框架,追求标准化陷入僵局;标准很不完善,存在重大缺陷,产品分裂, 也没有一个好的开源免费实现,也没有能够流行。

2001年末,hibernate第一个正式版本对外发布,赢得了开源社区的一片赞誉。 2003年6月8日,hibernate 2的发布,奠定了成功的基石。开始进入国内开发人员视野。

2003年末,hibernate获得了Jolt 2004大奖以及被jboss收购,确立了hibernate在java orm架构中的主导地位,ORM工业标准。

2005年3月,hibernate 3正式发布。

成功之道

? ? ? ? ?

快速发布,即时响应 全面的回归测式 追求卓越 避免过度设计 集权

? ? ? ? ?

文档 避免标准化

10分钟之内把Hibernate跑起来 开发人员的责任感

易用的、可更新的wiki网页

何为hibernate

创建一份XML“映射文档”,告诉Hibernate您希望能够保存在数据库中的类,以及它们如何关联到该数据库中的表和列,然后就可以要求它以对象的形式获取数据,或者把对象保存为数据。运行时,Hibernate读取映射文档,然后动态构建Java类,以便管理数据库与Java之间的转换。在Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。要修改这些对象,(一般情况下)只需在程序中与它们进行交互,然后告诉Hibernate保存修改即可。类似地,创建新对象也很简单;只需以常规方式创建它们,然后告诉Hibernate有关它们的信息,这样就能在数据库中保存它们。

持久层设计

持久层概念

专注于实现持久化的一个相对独立的领域,可以通过一个简单的逻辑图表达。

ORM(object relational mapper)对象-关系型数据映射组件

优点:

? ? ? ?

减少乏味的代码 更加面向对象的设计 更好的性能 更好的移植性

缺点: ? ? ? ? ?

粒度问题granularity 子类型问题subtypes 同一性问题identity 关联问题associations 对象导航问题navigation

设计模式

? ? ? ?

工厂模式factory 代理模式proxy decorator模式 dynamic proxy模式

资源管理模式

A. DAO(data access object)模式

I.DAO模式的实现层次:

)

■ 允许应用对Hibernate内部出现的事件进行处理的回调接口,例如Interceptor,Lifecycle和Validatable接口。

(

Callback interfaces that allow the application to react to events occurring inside Hibernate, such as Interceptor, Lifecycle, and Validatable.

)

■ 允许对Hibernate强大的映射功能进行扩展的接口, 例如UserType ,CompositeUserType和IdentifierGenerator。这些接口由应用的底层代码实现(如果需要的话)。

(

Interfaces that allow extension of Hibernate’s powerful mapping

functionality, such as UserType, CompositeUserType, and IdentifierGenerator. These interfaces are implemented by application infrastructure code (if necessary).

)

详解

Configuration

正如其名,Configuration 类负责管理Hibernate 的配置信息。Hibernate 运行时需要 获取一些底层实现的基本信息,其中几个关键属性包括: 1、数据库URL 2、数据库用户

3、数据库用户密码

4、数据库JDBC驱动类 1、 数据库dialect,用于对特定数据库提供支持,其中包含了针对特定数据库特性的实现,如Hibernate数据类型到特定数据库数据类型的映射等。 当然,还有指定Hibernate映射文件的位置。(*.hbm.xml)。

Hibernate配置有两种方法:

一、属性文件配置。默认文件名是hibernate.properties。调用代码: Configuration config = new Configuration(); 二、XML文件配置。默认文件名是hibernate.cfg.xml。 Configuration config = new Configuration().configure();

SessionFactory:应用程序从SessionFactory(会话工厂)里获得Session(会话)实例。它打算在多个应用线程间进行共享。通常情况下,整个应用只有唯一的一个会话工厂——例如在应用初始化时被创建。然而,如果你使用Hibernate访问多个数据库,你需要对每一个数据库使用一个会话工厂。

会话工厂缓存了生成的SQL语句和Hibernate在运行时使用的映射元数据。它也保存了在一个工作单元中读入的数据并且可能在以后的工作单元中被重用(只有类和集合映射指定了使用这种二级缓存时才会如此)。

SessionFactory sessionFactory = config.buildSessionFactory();

Session(会话):该接口是Hibernate使用最多的接口。Session不是线程安全的,它代表与数据库之间的一次操作。Session通过SessionFactory打开,在所有的工作完成后,需要关闭:它的概念介于Connection和Transaction之间。我们可以简单的认为它是已经装载对象的缓存或集合的一个独立工作单元。我们有时也称Session为持久化管理器,因为它是与持久化有关的操作的接口。

Hibernate会话并不是线程安全的因此应该被设计为每次只能在一个线程中使用。Hibernate会话与Web层的HttpSession没有任何关系。

Session session = sessionFactory.openSession();

Transaction:事务将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA)——允许应用通过一组一致的API控制事务边界。这有助于保持Hibernate应用在不同类型的执行环境或容器中的可移植性。

Transaction trans = session.beginTransaction ();

Query: Query(查询)接口允许你在数据库上执行查询并控制查询如何执行。查询语句使用HQL或者本地数据库的SQL方言编写。

Query query = session.createQuery(“from User”);

Lifecycle:Lifecycle接口提供了一些回调方法,可以让持久化对象在save或load之后,或者在delete或update之前进行必要的初始化与清除步骤。

public interface Lifecycle {

public boolean onSave(Session s) throws CallbackException; (1) public boolean onUpdate(Session s) throws CallbackException; (2) public boolean onDelete(Session s) throws CallbackException; (3) public void onLoad(Session s, Serializable id); (4) }

(1) onSave - 在对象即将被save或者insert的时候回调 (2) onUpdate - 在对象即将被update的时候回调(也就是对象被传递给Session.update()的时候)

(3) onDelete - 在对象即将被delete(删除)的时候回调 (4) onLoad - 在对象刚刚被load(装载)后的时候回调

Validatable: 该接口是合法性检查的回调。如果持久化类需要在保存其持久化状态前进行合法性检查,它可以实现下面的接口:

public interface Validatable {

public void validate() throws ValidationFailure; }

如果发现对象违反了某条规则,应该抛出一个ValidationFailure异常。在Validatable实例的validate()方法内部不应该改变它的状态。

和Lifecycle接口的回调方法不同,validate()可能在任何时间被调用。应用程序不应该把validate()调用和商业功能联系起来。

Interceptor: Interceptor接口提供从session到你的应用程序的回调方法,让你的程序可以观察和在持久化对象保存/更改/删除或者装载的时候操作它的属性。一种可能的用途是用来监视统计信息。比如,下面的Interceptor会自动在一个Auditable创建的时候设置其

createTimestamp,并且当它被更改的时候,设置其lastUpdateTimestamp属性。

UserType: 开发者创建属于他们自己的值类型也是很容易的。比如说,你可能希望持久化java.lang.BigInteger类型的属性,持久化成为VARCHAR字段。Hibernate没有内置这样一种类型。自定义类型能够映射一个属性(或集合元素)到不止一个数据库表字段。比如说,你可能有这样的Java属性:getName()/setName(),这是java.lang.String类型的,对应的持久化到三个字段:FIRST_NAME, INITIAL, SURNAME。 要实现一个自定义类型,可以实现net.sf.hibernate.UserType或net.sf.hibernate.CompositeUserType中的任一个,并且使用类型的Java全限定类名来声明属性。请查看net.sf.hibernate.test.DoubleStringType这个例子,看看它是怎么做的。

注意使用标签来把一个属性映射到多个字段的做法。

数据检索

Hibernate Query Language (HQL)

object-oriented dialect of ANSI SQL

Criteria queries (QBC)

extensible framework for query objects includes Query By Example (QBC) detachedCriteria

Native SQL queries

direct passthrough with automatic mapping named SQL queries in metadata

开发

基于B/S的典型三层架构:

基本配置

Managed environment—Pools resources such as database connections and

allows transaction boundaries and security to be specified declaratively (that is, in metadata). A J2EE application server such as JBoss, BEA WebLogic, or IBM WebSphere implements the standard (J2EE-specific) managed environment for Java. Jdbc connection pooling in a non-managed environment

Hibernate with a connection pool in a non-managed environment

Non-managed environment—Provides basic concurrency management via

thread pooling. A servlet container like Jetty or Tomcat provides a non-managed server environment for Java web applications. A stand-alone

desktop or command-line application is also considered non-managed. Non-managed environments don’t provide automatic transaction or resource management or security infrastructure. The application itself manages database connections and demarcates transaction boundaries.

Hibernate in a managed environment with an application server

高级配置

hibernate最佳实践 参考

《hibernate in action》《hibernate reference》《深入浅出hibernate》

本文来源:https://www.bwwdw.com/article/fp77.html

Top