hibernate要点整理

hibernate处理事务的整体流程:

软件模型中与对象之间的关系:

1.关联

例如:

一个订单Order对应一个客户Customer,一个客户对应多个订单:

即订单到客户为一对一的关系,客户到订单是一对多的关系。

public class Order implements Serializable {
  private static final long serialVersion = 2L;
  private Long id;
  private String orderNumber;
  private double price;
private Customer customer;

}

关联可分为一对一、一对多和多对多。


还可分为单项关联和双向关联。

例如:

单项关联:仅仅建立从Order到Customer的多对一关联,即仅仅在Order类中定义customer属性。或者仅仅建立从Customer到Order的一对多关联,即仅仅在Customer类中定义orders集合。
双项关联:既建立从Order到Customer的多对一关联,又建立从Customer到Order的一对多关联。

2.依赖:

类之间访问关系。无需定义成属性。在A中访问B中的
方法或属性,或者A负责实例化B。

最常见的就是:有一些实体类,然后写关于实体类的数据库操作类,或者写一个测试类。

3.聚集(Aggregation):整体与部分的关系。

例:人与手的关系。部分类的对象不能单独存在,他的生命周期依赖于整体类的对象的生命周期,整体消失时,部分也随之消失。 

4.一般化(Generalization):类之间继承关系。

 

 

域对象的持久化概念
实体域对象在内存中创建后,不能永久存在。将实体域对象永久保存起来,就是持久化的过程。通常只有实体域对象需要持久化,过程域对象和事件域对象一般不需要持久化。广义持久化指增、删、改、查。

 

 

对象--关系映射的概念

面向对象概念 面向关系概念
对象 表的行(记录)
属性 表的列(字段)

ORM中间件的使用方法
采用元数据来描述对象-关系映射细节,元数据通常采用xml格式,并存放在专门的对象-关系映射文件中。只要配置了持久化类与表的映射关系,orm中间件在运行时就能够参照映射文件的信息,把域对象持久化到数据库中。

 

Hibernate软件包

 

hibernate3.jar: 包含Hibernate3的基础框架和核心API类库,是必须使用的jar包。
cglib-2.1.2.jar: CGLIB库,Hibernate用它来实现PO字节码的动态生成,它是非常核心的库,是必须使用的jar包。
dom4j-1.6.1.jar: dom4j是一个Java的XML API,类似于jdom,用来读写XML文件。
commons-collections.jar: Apache Commons包中的一个,包含了一些Apache开发的集合类,功能比java.util.*强大。必须使用的jar包。
commons-logging.jar: Apache Commons包中的一个,包含了日至功能,必须使用的jar包。

ant-1.6.5.jar: Ant编译工具的jar包,用来编译Hibernate源代码的。它是可选包。
c3po-0.9.0.jar: C3PO是一个数据库连接池,Hibernate可以配置为使用C3PO的连接池,如果准备用这个连接池,就需要这个jar包。
connector.jar: JCA(Java Cryptography Architecture,Java加密架构,java平台中用于访问和开发加密功能的框架)规范,如果在App Server上把Hibernate配置为Connector,就需要这个jar。一般App Server都会带上这个包。
jaas.jar: JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。所以它的实际上是多余的包。

jdbc2_0-stdext.jar: JDBC2.0的扩展包,一般来说数据库连接池会用上它,不过App Server都会带上它,所以也是多余的。
jta.jar: JTA(java事务处理的机制)规范,当Hibernate使用JTA的时候需要,不过App Server都会带上它,所以也是多余的。
junit-3.8.1.jar: Junit包,当运行Hibernate自带的测试代码的时候需要,否则就不用。
xerces-2.6.2.jar和xml-apis.jar:Xerces是XML解析器,xml-apis实际上是JAXP。也是多余的包。

 

Hibernate API简介
1.提供访问数据库操作(session,transaction,query)
2.配置hibernate接口(configuratioin)
3.回调接口(Interceptor,Lifecycle,Validatable)
4.用于扩展的功能接口(UserType,CompositeUserType,
IdentifierGenerator)

 

Hibernate对JDBC做了轻量级的封装。所谓轻量级是
指Hibernate并没有完全封装JDBC,java应用既可以
通过HibernateAPI来访问数据库,还可直接通过JDBC
API访问数据库。

 

Hibernate核心接口
1.Configuration
配置hibernate,根启动hibernate,创建sessionFactory对象。
2 .sessionFactory
负责创建Session对象,可以通过Configuration对象创建SessionFactory对象。
SessionFactory 对象中保存了当前的数据库配置信息和所有映射关 系以及 预定义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存。
SessionFactory对象的创建会有较大的开销,而且SessionFactory对象采取了线程安全的设计方式,因此在实际中SessionFactory对象可以尽量的共享,在大多数情况下,一个应用中针对一个数据库可以共享一个SessionFactory实例

3.Session
使用最广泛,也被称为持久化管理器,它提供和持久
化相关的操作。增、删、改、查等。不是线程安全的,因此,
一个Session对象只可以由一个线程使用。避免多
个线程共享。轻量级的,创建和销毁不需要消耗太多资源。
Session中有一个缓存,称为一级缓存。存放当前工作单元加
载的对象。

 

4.Transaction hibernate数据库事务接口,
将应用代码从底层的事务实现中抽象出来——这可能是一个JDBC事务,一个JTA用户事务或者甚至是一个公共对象请求代理结构(CORBA)——允许应用通过一组一致的API控制事务边界。
使用Hibernate进行操作时(增、删、改)必须显示的调用Transaction(默认:autoCommit=false)

Configuration config = new Configuration().configure();

SessionFactory factory = config.buildSessionFactory();

Session session = factory.openSession();

Transaction tx = session.beginTransaction();

 

5.Query和Criteria接口:
都是查询接口,query实例
包装了HQL查询语句,hql是面向对象的,他引用类
名及类的属性名,而不是表名和字段名。Criteria接
口完全封装了基于字符串形式的查询语句,比
query接口更面向对象,他擅长执行动态查询。
sessoin接口的find方法也具有数据查询功能,但他
只是执行一些简单的hql查询语句的快捷方式,远没
有query接口功能强大。

 

Hibernate运行过程

 

Hibernate的运行过程如下:
1、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息,
2、并用这些信息生成一个SessionFactory对象,
3、然后从SessionFactory对象生成一个Session对象,
4、并用Session对象生成Transaction对象;
A、可通过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操作;
B、在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作;如果没有异常,Transaction对象将提交这些操作到数据库中。

 

数据类型对比

posted @ 2014-07-24 12:49  爱的叹息  阅读(124)  评论(0)    收藏  举报