对象关系映射
如果是集合类型的属性,它的类型必须定义为集合的接口。例如: List、Set。
提供一个标识属性(identifier property)。如果没有该属性,一些 功能不起作用,比如:级联更新(Cascaded updates) Session.saveOrUpdate()。
持久化类和关系数据库的映射
➢ 范式不匹配的代价
花费很多时间和精力来手工实现对象和关系的匹配。 甚至要扭曲对象模型直到它与下层的关系技术匹配为止。 JDBC API本身的问题。JDBC和SQL提供了一个面向语句(即命令)
的方法从SQL数据库中来回移动数据。至少在三个时刻(Insert, Update,Select)必须指定一个结构化关系,这增加了设计和实现 所需要的时间。
优点
缺点
Apache OJB
性能、稳定性,属于 Apache 基金组织
文档资源太少,支持标准太多 成了负担(ODMG 3.0, JDO1.0)
iBATIS
可以控制更多的数据库操 持久层封装不够彻底,只是一 作细节。实用于遗留系统 个DBHelper。 的改造和对既有数据库的
复用。
Hibernate 成熟、流行、功能强大。 不够透明 并逐渐发展成Java 持久层 事实上的标准。
关系数据库
表的列
表 外键 关联表 单表继承、具体表继承、 类表继承
对象—关系数据库的不匹配范式
粒度(granularity)的问题 子类型(subtypes)的问题 同一性(identity)的问题 与关联(associations)有关的问题 对象结构导航(navigation)的问题
➢ Hibernate配置的两种方法:
属性文件(hibernate.properties)。 调用代码:Configuration cfg = new Configuration(); Xml文件(hibernate.cfg.xml)。 调用代码:Configuration cfg = new Configuration().configure();
对象/关系映射—Hibernate
学员要求:熟悉Java、SQL、JDBC,掌握面向对象的开发方法,
并有实际项目开发经验
课程目标:理解O/R Mapping原理,掌握Hibernate开发的相关
知识,并能使用Hibernate进行实际项目开发 Email:
目录
一、持久化层-O/Rrnate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践
Hibernate核心接口
Configuration
➢ 概述:Configuration 类负责管理Hibernate 的配置信息。它包括如
下内容: Hibernate运行的底层信息:数据库的URL、用户名、密码、JDBC
驱动类,数据库Dialect,数据库连接池等。 Hibernate映射文件(*.hbm.xml)。
……… } create table tbl_user (
name varchar(255) not null , password varchar(255), ………. primary key (name) )
➢ 如何进行对象-关系数据库的匹配?
对象
类的属性(基本 类型) 类
1:n/n:1
n:m 继承
二、Hibernate入门
➢ Hibernate概述
Hibernate是非常优秀、成熟的O/R Mapping框架。它提供了强大的 对象和关系数据库映射以及查询功能。
➢ Hibernate优势
开源(LGPL) 成熟 流行(约13 000 downloads/month) 自定义API JBoss 将用Hibernate3实现Entity Beans
O/R Mapping -What? Why?
➢ 什么是O/R Mapping?
对象-关系映射是一门非常实用的工程技术,它实现了Java应用中 的对象到关系数据库中的表的自动的(和透明的)持久化,使 用元数据(meta data)描述对象与数据库间的映射。
➢ O/R Mapping的优点
提高生产率(Productivity) 可维护性(Maintainability) 更好性能(Performance) 厂商独立性(Vendor independence)
一、持久化层-O/R Mapping
基于B/S的典型三层架构
如何分层?
业务逻辑层和持久化 层绝不要依赖于展现层。 使用假设法测试。 例子:1、一个显示课程 考试分数的列表。现在 要将不及格的分数用红 色字体显示(低于60 分)。 2、搜索。
如何进行对象-关系数据库的匹配
public class User { private String name; private String password; private List address;
Hibernate开发步骤
一、持久化类的设计 二、持久化类和关系数据库
的映射 三、应用的开发
持久化Java类必须遵循的原则
为类的持久化类字段申明访问方法(get/set)。Hibernate对 JavaBeans风格的属性实行持久化。
实现一个默认的构造方法(constructor)。这样的话Hibernate就可 以使用Constructor.newInstance()来实例化它们。
基于关系数据库的持久层可选方案
SQL/ JDBC Entity Bean
JDO
优点
缺点
成熟,流行,使用DAO 代码烦杂,可读性差,维护困
模式
难,移植困难
CMP(EJB1.1之后), 未来的EJB3
简单、透明、标准
错误的设计。不可移植,依赖 性强,不可序列化,不支持多 态的关联查询
不够成熟
基于关系数据库的持久层可选方案
Middlegen: 从数据库中已有
的表结构中生成Hibernate映射文 件。当前版本是2.1可以去下载。
XDoclet:它通过在Java源代码中加入特定的JavaDoc tag,从而
为其添加特定的附加语义,之后通过XDoclet工具对代码中 JavaDoc Tag进行分析,自动生成与代码对应的配置文件()。 XDoclet提供了对Hibernate的支持,这样我们可以直接由Java代码 生成Hibernate映射文件。