http://blog.csdn.net/yerenyuan_pku/article/details/52732990

Java对象持久化概述

应用程序的分层体系结构

基于B/S的典型三层架构

 
说明:

  1. 展现层:提供与用户交互的界面。
  2. 业务逻辑层:实现各种业务逻辑。
  3. 数据访问层:负责存放和管理应用程序的持久化业务数据。

更详细的三层架构如下图所示: 
 
软件的层必须具备如下特征:

  1. 每个层由一组相关的类或组件构成,共同完成特定的功能。
  2. 层与层之间存在自上而下的依赖关系,即上层组件访问下层组件的 API,而下层组件不应该依赖上层组件。

数据访问层与Hibernate在Java应用程序中的角色

数据访问层(持久化层)封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标:

  1. 代码重用性高,可完成所有的数据访问操作。
  2. 如果需要的话,能够支持多种数据库平台。
  3. 具有相对独立性,当持久化层变化时,不会影响上层实现。

在数据访问层(持久化层)中可以使用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);
}

执行步骤如下:

  1. 运用反射机制,获得Customer对象的Customer.class类。
  2. 参照映射文件得到Customer类对应的表的信息,以及和Customer类关联的类以及相应的表信息。
  3. 根据以上信息生成SQL语句。
  4. 调用Hibernate API,执行该语句。

流行的ORM框架

  • Hibernate 
    非常优秀、成熟的ORM框架。提供强大的对象和关系数据库映射以及查询功能。Hibernate是面向对象的程序设计语言和关系型数据库之间的桥梁,允许开发者采用面向对象的方式来操作关系数据库。 
    Hibernate的目标是释放开发者通常与数据库持久化相关的编程任务的 95%,消除那些针对特定数据库厂商的SQL代码。
  • Ibatis 
    相比Hibernate灵活高,运行速度快。开发速度慢,不支持纯粹的面向对象操作,需熟悉sql语句,并且熟练使用sql语句优化功能。
  • TopLink
  • OJB

Hibernate与Jdbc代码对比

小结

转载于:https://www.cnblogs.com/telwanggs/p/6962840.html

(转)Hibernate框架基础——Java对象持久化概述相关推荐

  1. (转)Hibernate框架基础——一对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础--映射集合属性详细讲解的是值类型的集合(即 ...

  2. Java job interview:Java对象持久化的新的规范JDO

    ●JDO(Java Data Object )是Java对象持久化的新的规范,也是一个用于存取某种数据仓库中的对象的标准化API. ●Java数据对象(Java Data Objects,JDO)是一 ...

  3. (转) Hibernate框架基础——操纵持久化对象的方法(Session中)

    http://blog.csdn.net/yerenyuan_pku/article/details/52761021 上一篇文章中我们学习了Hibernate中java对象的状态以及对象的状态之间如 ...

  4. (转)Hibernate框架基础——在Hibernate中java对象的状态

    http://blog.csdn.net/yerenyuan_pku/article/details/52760627 在Hibernate中java对象的状态 Hibernate把对象分为4种状态: ...

  5. java对象持久化技术_Java对象持久化技术Hibernate 一

    Hibernate是Java应用和关系数据库之间的桥梁,它负责Java对象和关系数据之间的映射.Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供了面向对象的数据访问API.在J ...

  6. Hibernate框架基础——Hibernate入门

    Hibernate入门 Hibernate介绍 Hibernate是一个基于jdbc的开源的持久化框架,是一个优秀的ORM实现,它很大程度的简化了dao层编码工作.Hibernate对JDBC访问数据 ...

  7. (转)Hibernate框架基础——cascade属性

    http://blog.csdn.net/yerenyuan_pku/article/details/52760010 我们以部门和员工的关系为例讲解一对多关联关系映射时,删除部门时,如果部门有关联的 ...

  8. (转)Hibernate框架基础——多对多关联关系映射

    http://blog.csdn.net/yerenyuan_pku/article/details/52756536 多对多关联关系映射 多对多的实体关系模型也是很常见的,比如学生和课程的关系.一个 ...

  9. Hibernate框架基础——cascade属性

    我们以部门和员工的关系为例讲解一对多关联关系映射时,删除部门时,如果部门有关联的员工且inverse属性为false,那么由于可以维护关联关系,它就会先把关联的员工的外键列设为null值,再删除自己. ...

最新文章

  1. 认识和了解python
  2. 西北工业大学计算机毕业论文,西北工业大学硕士论文开题报告应注意的事项
  3. python旋转排序数组_LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现...
  4. java 关于JDBC和DAO模式使用
  5. Kaggle数据竞赛——伪标签的使用
  6. 字符流读取的全部方法
  7. opencv3.2.0实现视频抽帧,并保存成图片
  8. The field file exceeds its maximum permitted size of 1048576 bytes
  9. 朴素贝叶斯-公园穿凉鞋问题的推导
  10. 【机器学习】gini系数的计算
  11. 程序员的“三十而已”
  12. 2022年,程序员如何选择电脑
  13. Ubuntu下Apache重启错误:Could not reliably determin解决
  14. 网络安全与渗透:文件上传漏洞,一文详解(十)此生无悔入华夏,男儿何不带吴钩
  15. 《Dreamweaver CS6 完全自学教程》笔记 第十七章:Spry 框架技术
  16. DEV-C++下载、安装、使用教程(文件、项目)
  17. 数据库完整性(实体完整性,参照完整性,用户定义完整性)
  18. Flink(八)Flink的Parallelism并行度
  19. python怎样创建列表_如何创建Python列表(list)和添加元素
  20. 达飞云贷:玩转节日,给你不一样的惊喜!

热门文章

  1. tomcat配置请求指定html文件路径,Tomcat8限制指定域名或者IP访问(示例代码)
  2. (221)FPGA芯片结构组成
  3. vue 预检_vue全家桶+element 项目踩坑总结
  4. 11.FreeRTOS学习笔记-内存管理
  5. RTL8201网络芯片讲解
  6. STM32 串口详解
  7. OpenMV常用函数整理
  8. 计算机程序制作的小作品,义乌市中小学生电脑作品制作比赛201203
  9. Android默认记住登录用户名,【教程】Android 记住密码和自动登录界面的实现
  10. 计算机的试题步骤,计算机二级题目  做计算机二级试题,按照答案步骤,为什么word 爱问知识人...