Hibernate3.6.2 基本概念和体系结构

Hibernate ,一个开源的对象关系映射 ORM Object Relation Mapping )框架,即将关系型数据库转换为对象。 Hibernate JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思想来操作数据库(即采用面向对象的方式来操作关系型数据库),所以 Hibernate 可以应用在任何使用 JDBC 的场合。用一句话来说, Hibernate 是面向对象程序设计语言和关系型数据库之间的桥梁

说明:

轻量级和重量级概念:

轻量级架构:用一个包导一个包

重量级架构:只需要用一个,需要导入全部 jar

所以量级主要是看容器的依赖性所决定,依赖性越小,越轻量

基于 RDB 的持久层可选方案:

名称

扫描二维码关注公众号,回复: 693282 查看本文章

优点

缺点

SQL/JDBC

成熟、流行,使用 DAO 模式

代码繁杂、可读性差、维护困难、移植困难

EntityBean

CMP EJB1.1 之后),未来的 EJB3

错误的设计,不可移植,依赖性强,不可序列化,不支持多态的关联查询

JDO

简单、透明、标准

不够成熟

Apache OJB

性能、稳定性

文档资源太少,支持标准太多成了负担

iBatis/ myBatis

可以控制更多的数据库操作细节,适用于遗留系统的改造和对既有数据库的复用

持久层封装不够彻底,只是一个 DBHelper

Hibernate

成熟、流行、功能强大,并逐渐发展成为 Java 持久层的标准

不够透明,执行效率不高

Hibernate 结构:

 

支持 JDBC JNDI JTA Java 事务 API ), Hibernate 中常用的类( Transaction Session SessionFactory

 

1、Configuration

负责管理Hibernate的配置信息,这些配置信息都是从配置文件hibernate.cfg.xml或者Hibernate.properties读取的,当然也可以自定义文件名称,只要在实例化Configuration的时候指定具体的路径就可以了。

2、SessionFactory

Configuration的实例会根据当前的配置信息,构造SessionFactory实例。

SessionFactory是线程安全的,一般情况下一个应用中一个数据库共享一个SessionFactory实例。
3、Session

一般的持久化方法(CRUD)都是通过Session来调用的,Session是非线程安全的
4、Transaction:事务管理
5、Query:查询的接口

说明:

持久化概念:

所谓的持久化就是将程序数据在持久状态和瞬时状态间转换的机制 。持久化的主要应用是将内存中的对象存储在关系型的数据库中,当然也可以存储在磁盘文件中、 XML 数据文件中等等。

1 )瞬时状态 (transient)

保存在内存中的数据。程序退出后,数据就消失了。

2 )持久状态 (Persisten)

在一定周期内保持不变就是持久化 , 持久化是针对时间来说的 . 数据库中的数据就是持久化了的数据 , 只要你不去删除或修改。比如在 IE 浏览器中一次 Session 会话中 Session 对象变量也是不变的 , Session 容器中持久化,对象持久化的方式有很多种 , 根据周期不同有 ,page,Session,Application

 

hibernate 为应用程序提供了高效的 O/R 关系映射和查询服务,为面向对象的领域模型到传统的关系型数据库的映射,提供了一个使用方便的框架。他也是对对象持久化一个很好的实现。

Hibernate 映射结构:

将数据库中表通过 XML 映射找到对应的 POJO 类(相当于 VO

说明:

POJO VO DAO PO BO DTO 概念:

DAO ,最好理解,就是 data access object ,数据访问对象,主要用来封装对 DB 的访问;

1 POJO plain ordinary java object 无规则简单 java 对象。一个中间对象,可以转化为 PO DTO VO

POJO 持久化之后 ==> PO

POJO 传输过程中 ==> DTO

POJO 用作表示层 ==> VO

PO VO 都应该属于它。

2 VO :vvalue object 值对象 / view object 表现层对象。

A 、主要对应页面显示( web 页面 /swt swing 界面)的数据对象。

B 、可以和表对应,也可以不,这根据业务的需要。

:在 struts 中,用 ActionForm VO ,需要做一个转换,因为 PO 是面向对象的,而 ActionForm 是和 view 对应的,要将几个 PO 要显示的属性合成一个 ActionForm ,可以使用 BeanUtils copy 方法。

3 PO persistant object 持久对象 , 最形象的理解就是一个 PO 就是数据库中的一条记录。 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象。

4 BO business object 业务对象 , 可以包括多个 PO ,通常需要将 BO 转化成 PO ,才能进行数据的持久化,反之,从 DB 中得到的 PO ,需要转化成 BO 才能在业务层使用。

关于 BO 主要有三种概念

A 、只包含业务对象的属性;

B 、只包含业务方法;

C 、两者都包含。

5 DTO TO Data Transfer Object 数据传输对象

A 、用在需要跨进程或远程传输时,它不应该包含业务逻辑。

B 、比如一张表有 100 个字段,那么对应的 PO 就有 100 个属性(大多数情况下, DTO 内的数据来自多个表)。但 view 层只需显示 10 个字段,没有必要把整个 PO 对象传递到 client ,这时我们就可以用只有这 10 个属性的 DTO 来传输数据到 client ,这样也不会暴露 server 端表结构。到达客户端以后,如果用这个对象来对应界面显示,那此时它的身份就转为 VO

Hibernate 中,最核心的概念就是对 PO 的状态管理。一个 PO 有三种状态:

   1. 未被持久化的 VO ,此时就是一个内存对象 VO ,由 JVM 管理生命周期。

   2. 已被持久化的 PO ,并且在 Session 生命周期内,此时映射数据库连接,由数据库管理生命周期。

   3. 曾被持久化过,但现在和 Session 已经托管( detached )了,以 VO 的身份在运行。它还可以进入另一个 Session ,继续 PO 状态管理。

需要注意的是, PO 最好只在持久层使用,如果脱离持久层到处使用,会给 Hibernate 带来不小的 PO 对象维护开销。

 

 

 

 

猜你喜欢

转载自xdwangiflytek.iteye.com/blog/1569433