现在的位置: 首页 > 综合 > 正文

1、hibernate初步

2018年02月05日 ⁄ 综合 ⁄ 共 3056字 ⁄ 字号 评论关闭

hibernate——冬眠

hibernate应用开发过程

- 创建Hibernate的配置文件
- 创建持久化类
- 创建数据库Schema
- 创建对象-关系映射文件
- 映射文件的文档类型定义(DTD)
- Hibernate与Struts集成
- 使用MyEclipse进行Struts与Hibernate项目的开发

1、应用程序的分层体系结构发展

- 双层应用:应用程序层,数据库层
- 三层应用:表述层,业务逻辑层,数据库层
- 四层应用:表述层,业务逻辑层,持久化层,数据库层
- N层应用:

2、hibernate开发实例
层与层之间存在自上而下的依赖关系,即上层组件会访问下层组件的API,而下层组件不应该依赖上层组件。
每个层对上层公开API,但具体的实现细节对外透明。当某一层的实现发生变化,只要它的API不变,不会影响其他层的实现

Java应用的持久化层

Hibernate是持久化层的一种实现方式

3、软件的模型

在软件开发领域,模型用来表示真实世界的实体。
在软件开发的不同阶段,需要为目标系统创建不同类型的模型:在分析阶段,需要创建概念模型;在设计阶段,需要创建域模型和数据模型

4、模型之间的关系

概念模型:概念模型用来模拟问题域中的真实实体;概念模型描述了每个实体的概念和属性,以及实体之间的关系;概念模型并不描述实体的行为;不管技术人员还是非技术人员都能看懂概念模型,他们可以和容易的提出模型中存在的问题,帮助系统分析人员及早对模型进行修改。

实体与实体之间存在三种关系:
Customer和Order实体:一对多。一个客户有多个订单,而一个订单只能属于一个客户。
Category和Item实体:多对多。一个商品类别包含多个商品,而一个商品可以属于多个商品类别。
Order和Item实体:多对多。一个订单包含多个商品,而一个商品可以属于多个订单。
Customer和ShoppingCart实体:一对多。一个客户有多个购物车,而一个购物车只能属于一个客户。
ShoppingCart和Item实体:多对多。一个购物车包含多个商品,而一个商品可以属于多个购物车。

5、关系数据模型

关系数据模型是在概念模型的基础上建立起来的,用于描述这些关系数据的静态结构,它由以下内容组成:
- 一个或多个表
- 表的所有索引
- 视图
- 触发器
- 表与表之间的参照完整性

表的主键
在关系数据库表中,用主键来识别记录并保证每条记录的惟一性,作为主键的字段必须满足以下条件:
- 不允许为null
- 每条记录具有惟一的主键值,不允许主键值重复。
- 每条记录的主键值永远不会改变。
使用代理主键机制,代理主键不具有业务含义,不会被改变(auto increment,uniqueidentifier)

表与表之间的参照完整性

删除时,多的一方删除,一的一方不动,反过来,一的一方删除,多的一方也删除

6、域模型

域模型是面向对象的。在面向对象术语中,域模型也可称为设计模型。域模型由以下内容组成:
- 具体状态和行为的域对象
- 域对象之间的关系
    - 关联(Association)
    - 依赖(Dependency)
    - 聚集(Aggregation)
    -一般化(泛化)(Generalization)

关联关系

聚集关系:聚集指的是整体与部分之间的关系,在实体域对象之间很常见

一般化关系:一般化指的是类之间的继承关系

7、域对象
域对象可以代表业务领域中的人、地点、事物或概念。域对象分为以下几种:

- 实体域对象:业务领域的名词
- 过程域对象:业务领域的动词
- 事件域对象:业务领域中的事件

实体域对象

实体对象可以代表人、地点、事物或概念。例如客户、订单、商品等作为实体域对象。
对于J2EE Web应用,这些名词可以作为包含状态和行为的JavaBean。采用JavaBean形式的实体域对象也称为POJO(Plain Old Java Object)
为了使实体域对象与关系数据库表中记录对应,可以为每个实体域对象分配惟一的OID(Object Identifier,即对象标示符),OID是关系数据库表中的主键(通常为代理主键)在实体域对象中的等价物。

过程域对象

过程域对象代表应用中的业务逻辑或流程,它们通常依赖于实体域对象
可以把业务领域中的动词,例如客户发出订单、登录应用等作为过程域对象
在J2EE Web应用中,它们可作为常规的JavaBean,具有管理和控制应用的行为

事件域对象

事件域对象代表应用中的一些事件(如异常、警告或超时)。这些事件通常由系统中的某种行为触发。
例如在多用户环境中,当一个客户端程序更新了某种实时数据,服务器端程序会创建一个事件域对象,其他正在浏览相同数据的客户端程序能够接受到这一事件域对象,随即同步刷新客户界面。

8、域对象的持久化概念

- 狭义的理解,“持久化”仅仅指把域对象永久保存到数据库中
- 广义的理解,“持久化”包括和数据库相关的各种操作:
    - 保存:把域对象永久保存到数据库中。
    - 更新:更新数据库中域对象的状态
    - 删除:从数据库中删除一个域对象。
    - 加载:根据特定的OID,把一个域对象从数据库加载到内存中。
    - 查询:根据特定的查询条件,把符合查询条件的一个或多个域对象从数据库加载到内存中。

通过JDBC API来持久化实体域对象

- Java应用访问数据库的最直接的方式就是直接访问JDBC API
- java.sql包提供了JDBC API。在java.sql包中常用的接口和类包括:
    - DriverManager:驱动程序管理器,负责创建数据库连接。
    - Connection:代表数据库连接。
    - Statement:负责执行SQL语句
    - PreparedStatement:负责执行SQL语句,具有预定义SQL语句的功能。
    - ResultSet:代表SQL查询语句的查询结果集。

JDBC编程的缺点

- 实现业务逻辑的代码和数据库访问代码掺杂在一起,使程序结构不清晰,可读性差
- 在程序代码中嵌入面向关系的SQL语句,使开发人员不能完全运用面向对象的思维编写程序。
- 业务逻辑和关系数据模型绑定,如果关系数据模型发生改变,如修改了CUSTOMERS表的结构,那么必须手工修改程序代码中的所有相关的SQL语句,这增加了维护软件的难度。
- 如果程序代码中的SQL语句包含语法错误,在编译时不能检查这种错误,只有在运行时才能发现这种错误,这增加了调试程序的难度。

9、对象——关系映射

ORM(Object——Relationship Mapping)

模式:在单个组件中负责所有实体域对象的持久化,封装数据访问细节。
Hibernate是ORM的一个实现

ORM模式:

对象——关系映射的概念

ORM解决的主要问题就是对象——关系的映射。域模型和关系模型都分别建立在概念模型的基础上。域模型是面向对象的,而关系数据模型是面向关系的。
一般情况下,一个持久化类和一个表对应,类的每个实例对应表中的一条记录。

域模型与关系模型之间存在许多不匹配之处

- 域模型中有继承关系,关系模型不能直接表示继承关系
- 域模型中有多对多关联关系,关系模型通过链接表来表示多对多关联关系
- 域模型中有双向关联关系,关系模型只有单向参照关系,而且总是many方参照one方。
- 域模型提倡精粒度模型,而关系模型提倡粗粒度模型。

域模型与关系模型之间的不匹配举例

10、在Java应用中使用Hibernate的步骤

- 创建Hibernate的配置文件
- 创建持久化类
- 创建对象——关系映射文件
- 通过Hibernate API编写访问数据库的代码

 

【上篇】
【下篇】

抱歉!评论已关闭.