Hibrnate培训教程(3)

2019-04-22 14:14

)

■ 允许应用对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》


Hibrnate培训教程(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:word单项操作题目操作步骤图解说明(全)(2010版本新)资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: