(转)Hibernate框架基础——Java对象持久化概述
http://blog.csdn.net/yerenyuan_pku/article/details/52732990
Java对象持久化概述
应用程序的分层体系结构
基于B/S的典型三层架构
说明:
- 展现层:提供与用户交互的界面。
- 业务逻辑层:实现各种业务逻辑。
- 数据访问层:负责存放和管理应用程序的持久化业务数据。
更详细的三层架构如下图所示:
软件的层必须具备如下特征:
- 每个层由一组相关的类或组件构成,共同完成特定的功能。
- 层与层之间存在自上而下的依赖关系,即上层组件访问下层组件的 API,而下层组件不应该依赖上层组件。
数据访问层与Hibernate在Java应用程序中的角色
数据访问层(持久化层)封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标:
- 代码重用性高,可完成所有的数据访问操作。
- 如果需要的话,能够支持多种数据库平台。
- 具有相对独立性,当持久化层变化时,不会影响上层实现。
在数据访问层(持久化层)中可以使用Hibernate框架以实现要求,如下图所示:
Hibernate中间件:Hibernate不和特定的业务领域相关,能够把任意一个Java应用与数据库系统连接,可以理解为是一种中间件。
软件模型
各种模型的说明
概念模型:
模拟问题域中的真实实体,描述每个实体的概念和属性及实体间关系,不描述实体行为。实体间的关系有一对一、一对多和多对多。如客户和订单两者之间的实体关系就是一对多的关系。
关系数据模型:
在概念模型的基础上建立起来的,用于描述这些关系数据的静态结构。有以下内容组成:
- 若干表
- 表的所有索引
- 视图
- 触发器
- 表与表之间的参照完整性
如图:
域模型:
在软件的分析阶段创建概念模型,在软件设计阶段创建域模型。组成部分有:
- 具有状态和行为的域对象。
- 域对象之间的关联。
域对象(domain object):
构成域模型的基本元素就是域对象。对真实世界的实体的软件抽象,也叫做业务对象(Business Object,BO)。域对象可代表业务领域中的人、地点、事物或概念。
域对象分为以下几种:
- 实体域对象:通常是指业务领域中的名词。(plain old java object,简单Java对象)
- 过程域对象:应用中的业务逻辑或流程。依赖于实体域对象,业务领域中的动词。如发出订单、登录等。
- 事件域对象:应用中的一些事件(警告、异常)。
域对象间的关系
关联:
关联是类之间的一种关系(引用关系),例如老师教学生,老公和老婆等就是一种关系。这种关系是非常明显的,在问题领域中通过分析直接就能得出。通常以属性定义的方式表现:
关联可分为一对一、一对多和多对多;还可分为单向关联和双向关联。
依赖:
如果两个元素其中一个的定义发生改变则会引起另一个元素发生变化则称这两个元素之间存在依赖关系。对于类来说,依赖可能存在于下列几种情况中:一个类要发送消息给另一个类;一个类将另一个类作为其数据的一部分;一个类的操作中将另一个类作为其参数。
类之间访问关系,无须定义成属性。在A中访问B中的方法或属性,或者A负责实例化B。
聚集(Aggregation):
整体与部分的关系,例人与手的关系。部分类的对象不能单独存在,他的生命周期依赖于整体类的对象的生命周期,整体消失时,部分也随之消失。
一般化(Generalization):
类之间继承关系。 
域对象的持久化概念
实体域对象在内存中创建后,不能永久存在。将实体域对象永久保存起来,就是持久化的过程。通常只有实体域对象需要持久化,过程域对象和事件域对象一般不需要持久化。广义持久化指增、删、改、查。 
ORM与ORM框架
ORM(Object/Relation Mapping)
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。
ORM主要解决对象-关系的映射
| 面向对象概念 | 面向关系概念 |
|---|---|
| 类 | 表 |
| 对象 | 表的行(记录) |
| 属性 | 表的列(字段) |
ORM的实现思想:
将关系数据库中表中的记录映射成为对象,以对象的形式展现,程序员可以把对数据库的操作转化为对对象的操作。因此ORM的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。
ORM采用元数据来描述对象-关系映射细节
元数据通常采用XML格式,并且存放在专门的对象-关系映射文件中。
ORM中间件的使用方法
采用元数据来描述对象-关系映射细节,元数据通常采用xml格式,并存放在专门的对象-关系映射文件中。只要配置了持久化类与表的映射关系,orm中间件在运行时就能够参照映射文件的信息,把域对象持久化到数据库中。例(Hibernate):
public void saveCustomer(Customer c){
getSession().save(c);
}
执行步骤如下:
- 运用反射机制,获得Customer对象的Customer.class类。
- 参照映射文件得到Customer类对应的表的信息,以及和Customer类关联的类以及相应的表信息。
- 根据以上信息生成SQL语句。
- 调用Hibernate API,执行该语句。
流行的ORM框架
- Hibernate
非常优秀、成熟的ORM框架。提供强大的对象和关系数据库映射以及查询功能。Hibernate是面向对象的程序设计语言和关系型数据库之间的桥梁,允许开发者采用面向对象的方式来操作关系数据库。
Hibernate的目标是释放开发者通常与数据库持久化相关的编程任务的 95%,消除那些针对特定数据库厂商的SQL代码。 - Ibatis
相比Hibernate灵活高,运行速度快。开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语句,并且熟练使用sql语句优化功能。 - TopLink
- OJB
Hibernate与Jdbc代码对比

小结

(转)Hibernate框架基础——Java对象持久化概述的更多相关文章
- 《精通Hibernate:Java对象持久化技术详解》目录
图书信息:孙卫琴 电子工业出版社 第1章 Java应用分层架构及软件模型: 1.1 应用程序的分层体系结构 1.1.1 区分物理层和逻辑层 1.1.2 软件层的特征 1.1.3 软件分层的优点 1.1 ...
- (转)Hibernate框架基础——一对多关联关系映射
http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础——映射集合属性详细讲解的是值类型的集合(即 ...
- Hibernate框架基础
Hibernate框架基础 Hibernate框架 ORM概念 O, Object 对象 R, Realtion 关系 (关系型数据库: MySQL, Oracle…) M,Mapping 映射 OR ...
- hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)。
hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换). 解答:在Hibernate中,对象有三种状态:临时状态.持久状态和游离状态. 临时状态:当new一个实体对象后,这个对 ...
- (转) Hibernate框架基础——操纵持久化对象的方法(Session中)
http://blog.csdn.net/yerenyuan_pku/article/details/52761021 上一篇文章中我们学习了Hibernate中java对象的状态以及对象的状态之间如 ...
- (转)Hibernate框架基础——在Hibernate中java对象的状态
http://blog.csdn.net/yerenyuan_pku/article/details/52760627 在Hibernate中java对象的状态 Hibernate把对象分为4种状态: ...
- (转)Hibernate框架基础——多对多关联关系映射
http://blog.csdn.net/yerenyuan_pku/article/details/52756536 多对多关联关系映射 多对多的实体关系模型也是很常见的,比如学生和课程的关系.一个 ...
- (转)Hibernate框架基础——cascade属性
http://blog.csdn.net/yerenyuan_pku/article/details/52760010 我们以部门和员工的关系为例讲解一对多关联关系映射时,删除部门时,如果部门有关联的 ...
- hibernate框架学习之对象状态
lHibernate对象共有三种状态 •瞬时状态:瞬时对象 •持久化状态:持久化对象 •托管状态:托管对象 l瞬时对象(Transient Object),简称TO l瞬时对象指的是应用程序创建出来的 ...
随机推荐
- Memento - 备忘录模式
定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 案例 比方如今有一个画图系统,我们在Viewer里面画了一些图形,可是在绘 ...
- android几个高速打包命令
在MTK android4.4 上,有几条命令能够高速打包system uaserdata bootimage,可提高效率. snod:这个命令是能够高速打包system.是不会运行android各 ...
- Eclipse Import别人的源代码,出错解决过程
1.从APKBus上下载了一个源码,想研究一下,结果出错了,经过各种百度,实验,终于解决了,现在记录一下.. File-Import 导入源文件.
- 利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全)
利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全) 14.7 利用JFreeChart生成多轴图表 通过JFreeChart插件还可以生成拥有多个坐标轴的图表,简称多轴图表.在生 ...
- HDU5834Magic boy Bi Luo with his excited tree 树形dp
分析:典型的两遍dfs树形dp,先统计到子树的,再统计从祖先来的,dp[i][0]代表从从子树回来的最大值,dp[i][1]代表不回来,id[i]记录从i开始到哪不回来 吐槽:赛场上想到了状态,但是不 ...
- 洛谷 P1181,1182 数列分段Section
数列分段Section I 题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格 ...
- Tensorflow学习笔记——占位符和feed_dict(二)
创建了各种形式的常量和变量后,但TensorFlow 同样还支持占位符.占位符并没有初始值,它只会分配必要的内存.在会话中,占位符可以使用 feed_dict 馈送数据. feed_dict是一个字典 ...
- BZOJ_2120_数颜色_Set+树状数组+主席树
BZOJ_2120_数颜色_Set+树状数组+主席树 Description 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会像你发布如下指令: 1. Q L ...
- tomcat调优配置
今天遇到一个tomcat服务注册后配置Java参数没效果,最后在注册表中删除原来的tomcat服务后,顺便看了一下tomcat的调优配置,看别人总结的不错,就转载一下. Tomcat.Jetty.Gl ...
- Ubuntu 14.04 台式机锐捷使用:
1.解压文件:RG_Supplicant_For_Linux_V1.31.zip2.sudo chmod -R 777 rjsupplicant3.进入文件夹(./rjsupplicant.sh -a ...