学习笔记之 O/R 映射技术的王牌Hibernate框架

转载 2006年06月08日 11:44:00

学习笔记之 O/R 映射技术的王牌Hibernate框架
by Naven at 2005-09-21

 - Javen-Studio 咖啡小屋工作室
简介

Hibernate 是一个开放源码的 ORM 持久层框架。作为优秀的持久层框架实现,Hibernate 框架提供了强大、高性能的对象到关系型数据库的持久化服务,开发人员可以使用面向对象的设计进行持久层开发。简单的说,Hibernate 只是一个将持久化类与数据库表相映射的工具,每个持久化类实例均对应于数据库表中的一个数据行而已。用户只需直接使用面向对象的方法操作此持久化类实例,即可完成对数据库表数据的插入、删除、修改、读取等操作。

当然实际的 Hibernate 框架非常复杂,用分层的概念划分的话,它相当于在 业务逻辑处理层 和 数据库底层JDBC驱动之间的一层,即通常说的持久化层,而用户通过 XML 配置文件将具体的持久化类与数据库表映射起来。Hibernate 的实际过程还需依赖 SQL 语言和 JDBC 编程接口,但是 Hibernate 将原本分散的 JDBC 和 SQL 配合产生的接口变成了对象化的接口,定义了自己的基于面向对象设计的 HQL(Hibernate Query Language)查询语言,通过它生成实际的 SQL 语句传递到数据库执行的。在和数据库连接方面,仍然使用连接池技术,在数据操作过程中,借助事务服务来保证可靠性,通过数据缓冲技术来改善性能。当然这些内部的机制均通过 XML 配置文件来调整,将上层业务逻辑的处理跟这些优化技术分离开,这样可独立进行系统性能的优化和监控了,而这些机制对每个不同的应用系统是完全一样的,所以 Hibernate 将它们完全封装起来使业务开发人员完全不比关系这些复杂技术。


Hibernate 的技术实现

1. Hibernate 的基础实例

Hibernate 的基础实例之 Configuration

Configuration 类负责管理 Hibernate 运行时需要获取一些底层实现的基本配置信息,如:数据库 URL、数据库用户、数据库用户密码、数据库 JDBC 驱动类、数据库适配器(dialect,用于对特定数据库支持)等。Hibernate 的配置文件为 hibernate.cfg.xml 或者 hibernate.properties,缺省在 CLASSPATH 路径下,可调用如下进行初始化:

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


Hibernate 的基础实例之 SessionFactory

SessionFactory 负责创建 Session 实例,通过 Configuation 实例创建它:

SessionFactory sessionFactory = config.buildSessionFactory();

如果需要访问多个数据库,要分别为其创建对应的 SessionFactory 实例。SessionFactory 实例中保存了当前数据库配置的所有映射关系,同时也负责维护当前的二级数据缓存和 Statement Pool。


Hibernate 的基础实例之 Session

Session 是 Hibernate 持久化操作的基础,提供了如save、update、delete等这些持久化操作。Session 实例是由SessionFactory 创建的,并且是非线程安全的,如下:

Session session = sessionFactory.openSession();

创建了实例,就可以使用它完成持久层操作,如下:

// 新增名为“Emma”的用户记录
TUser user = new TUser();
user.setName("Emma");
session.save(user);


2. O/R 映射技术

ORM 框架的主旨就是实现持久化对象和关系数据库表的映射,所以 O/R 映射关系无疑是 Hibernate 框架中最为关键的组成部分。Hibernate 使用 Decorator 模式和 Java 中的动态代理机制(Dynamic Proxy)即代理模式来操纵持久化对象的,参见《学习笔记之ORM设计中用到的模式》。
考虑到要在持久化类中定义与数据库表字段对应类成员变量,Hibernate 定义了一些基本数据类型(如 Java 的 Integer类对应于 SQL 的 INTEGER 数据类型,参见《深入浅出 Hibernate》)。这些基本数据类型覆盖了日常开发中所需的绝大多数情况,但对于某些特殊情况,Hibernate 引入了自定义数据类型。UserType 和 CompositeUserType 是 Hibernate 中提供的类型定义接口,通过继承它们生成子类可以实现自定义的数据类型。
Hibernate 使用 XML 作为映射配置文件,举例来说,对于一个数据库中的 USER 表需要有以下一些文件以建立它们的映射关系:
TUser.hbm.xml :映射关系配置文件,这是核心文件,有类和成员和表字段定义的映射定义等
TUser.java :数据库 USER 表的持久化类
可以使用某些工具通过数据库表的结构直接生成它们。


3. Criteria 查询技术和 HQL 语言

Hibernate 使用 Criteria Query 通过面向对象化的设计,将数据查询条件封装为一个对象,比如:

Criteria criteria = session.createCriteria(TUser.class);
criteria.add(Expression.eq("name"), "Erica"));
criteria.add(Expression.eq("sex", new Integer(1)));

这几条语句通过转换会成类似 “select * from t_user where name='Erica' and sex=1”这样的 SQL 语句。Criteria 本身只是一个查询容器,具体的查询条件需要通过 Criteria.add() 方法添加到 Criteria 实例中。Expression 对象具体描述了查询条件,针对 SQL 语法,Expression 提供了对应的查询限定机制(参见《深入浅出 Hibernate》)。
考虑到 Criteria 的生命周期影响性能,Hibernate 3.0 引入了一个新的 Criteria 实现:DetachedCriteria,它可以脱离 Session 实例独立存在,这样可以将通用的 Criteria 查询条件抽离,使用时才与当前的 Session 实例绑定以获得更好的代码重用效果。

不过由于 Hibernate 在实现过程中更加集中在 HQL 查询语言上,因此 Criteria 的功能实现还没做到尽善尽美,所以最常用的还是官方推荐的 HQL(Hibernate Query Language) 查询语言。HQL 提供了更接近传统 SQL 语句的查询语法,完整的 HQL 语法结构如下:

[select/update/delete ...] [from ...] [where ...] [group by ... [having ...]] [order by ...]

举例如下:

String hql = "from TUser as user where user.name='Erica' and sex=1";
Query query = session.createQuery(hql);
List userList = query.list();

Hibernate 3.0 基于 antlr 工具设计了 HQL 语言,通过解析器解析 HQL 语句,然后分析出其内容并转化为 SQL 语句。可以在 hibernate.cfg.xml 中,设置查询语言的转换器工厂。

O/R 映射技术的王牌Hibernate框架

Hibernate 是一个开放源码的 ORM 持久层框架。作为优秀的持久层框架实现,Hibernate 框架提供了强大、高性能的对象到关系型数据库的持久化服务,开发人员可以使用面向对象的设计进行持久层...
  • u014531879
  • u014531879
  • 2014年05月08日 15:35
  • 927

【SSH】Hibernate:O/R实体映射与一对一关联

实体映射 O/R映射是ORM框架中最为关键的组成部分了。其中的实体映射介绍hibernate中类和表之间的映射属性字段的基本技术   问题:数据库中有一个表【T_User】,其中字段有【ID】、【na...
  • mengdonghui123456
  • mengdonghui123456
  • 2016年05月16日 18:04
  • 1222

Hibernate学习笔记(一)O/R 映射入门

Hibernate是ORM的解决方案,其底层对数据库的操作依赖于JDBC,所以您必须先取得JDBC驱动程序,在这边所使用的是MySQL,所以您必 须至 MySQL® Connector/J 取得MyS...
  • angelof7
  • angelof7
  • 2014年05月06日 12:46
  • 311

hibernate框架ORM的实现原理

1.什么是ORM       ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就...
  • zhushuai1221
  • zhushuai1221
  • 2016年08月12日 10:01
  • 3488

黑马程序员学习笔记 Java的三大框架

如果做javaweb开发,spring是一定要学的,现在主流还是ssh,就是strurs+hibernate+spring,其中hibernate是持久层,用来持久化数据库操作的,如果不喜欢可以学点别...
  • Mr_April
  • Mr_April
  • 2015年07月03日 17:12
  • 1556

如果可以,我不想把O盟“王牌计划”推荐给你

二喜失恋了,这是我们圈里的人都知道的事,她颓废了一天,就在我们以为她要继续颓废很长时间的时候,她奇迹般的满血复活并且活的更精彩。   要知道,二喜上次失恋说要找回人生,跑去捡垃圾捡了两个月,她说...
  • asoOmeng
  • asoOmeng
  • 2016年12月30日 14:48
  • 1712

R语言与抽样技术学习笔记(Randomize)

R语言与抽样技术学习笔记(Randomize,Jackknife,bootstrap) 尽管二次抽样、重新抽样或者其他的对给定数据重新排序的方法并不能增加数据的信息,但是这些办法往往有助于我们提取信...
  • yujun7654321
  • yujun7654321
  • 2014年04月16日 21:48
  • 2484

Hibernate学习笔记(一)——简单的Hibernate实例入门

一、Hibernate简介 Hibernate是一个开源的对象/关系映射(ORM)框架,它对JDBC进行了轻量级的封装。所谓ORM就是Object/Relationship Mapping,为什么要...
  • u011024652
  • u011024652
  • 2016年09月19日 20:32
  • 866

【Hibernate框架学习】:Hibernate进阶之Hibernate核心接口和类(一)

我们来看一下Hibernate的执行流程:                         由此我们可以大概知道Hibernate的核心接口和类,Hibernate的核心类和接口一共有6个,分别...
  • erlian1992
  • erlian1992
  • 2016年12月06日 22:38
  • 706

Hibernate框架笔记

Hibernate 课程内容: 1.   常见的O/R框架(了解) 2.   Hibernate基础配置(重点) 3.   ID生成策略(重点掌握auto) 4.   Hibernate ...
  • g_s007
  • g_s007
  • 2016年07月07日 15:39
  • 191
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习笔记之 O/R 映射技术的王牌Hibernate框架
举报原因:
原因补充:

(最多只允许输入30个字)