最近一直在学习Hibernate,首先说一下Hibernate出现的原因吧,Hibernate是因为MVC的分层体系结构的出现,即数据持久层(模型层)的出现,持久层是在MVC三层架构的基础上提出来的,在提出持久层之前,业务逻辑层在实现业务逻辑的同时,还需要访问数据库,这样就为业务逻辑的扩展怎家了难度,有了持久层,业务逻辑层只需要负责业务逻辑的实现,对数据的交给持久层,使每一段业务逻辑代码的目的都更明确,这样操作就更简单了。

如下图:增加了持久层的MVC分层结构

Hibernate作为一个中间件,很好的实现了持久层的功能,其中就是使用了ORM(对象到关系的映射),Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

何谓“持久化”持久(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等。持久化顾名思义就是把缓存中的东西放到数据库中使之持久

对于需要持久化的对象,它的生命周期分为三个状态:临时状态,持久化状态,游离状态.

临时状态(Transient):刚刚用new语句创建,没有被持久化,不处于session的缓存中.处于临时状态的java对象被称为临时对象.

持久化状态(Persistent):已经被持久化,加入到session的缓存中.处于持久化的java对象被称为持久化对象.

游离状态(Detached):已经被持久化,但不处于session的缓存中,处于游离状态的java对象被成为游离对象.

持久化对象的特征:

.  位于一个session事例的缓存中,可以说持久化对象总是被一个session事例关联

.  持久化对象和数据库中的相关记录对应

.  Session在清理缓存时,会根据持久化对象的属性变化来同步更新数据库

.  Session的save()方法把临时状态变为持久化状态.

.  Session的update() ,saveOrUpdate()和lock()方法使游离状态变为持久化状态.

ORM模式

ORM是实现持久化的技术之一,ORM—Object-Relational Mapping对象到关系的映射,通过使用描述对象和数据库之间的元数据,将Java程序中的对象自动持久化到关系数据库中。

对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据。内存中的对象之间存在关联和继承关系,而在数据库中,关系数据库无法直接表达多对多关联和继承关系。因此,ORM一般以中间件的形式存在,主要实现程序对象到关系数据库的映射,ORM中间件能在任何一个Java程序的业务逻辑层和数据库层之间充当桥梁。

ORM的优点:

1.提高了开发效率。由于ORM可以自动对实体对象与数据库中的表进行字段与属性的映射,所以实际操作中已经不再需要一个专用的、庞大的数据访问层。

2.ORM提供了对数据库的映射能够像操作对象一样从数据库中获取数据,而不用直接进行SQL编码。

ORM的缺点

系统结构方面,采用ORM的系统一般都是多层系统,层次多了效率就会降低。

2.性能方面,主要体现在对持久化对象的提取和对数据的加工处理上,采用ORM时,系统可能将全部数据提取到内存对象中,然后进行过滤和加工处理,这样会产生性能的问题。

3.对象持久化方面,ORM一般会持久化所有的属性,这对有些应用是不希望发生的。

常用的ORM中间件有Hibernate、IBatis、Apache OJB 等等

以上的持久化技术是Hibernate实现ORM模式,还有其他的实现持久化模式

   1.JDBC直接访问数据库

JDBC(Java DataBase Connectivity standard)是面向对象的应用程序接口,统一规定了关系数据库的标准接口,为各个数据库厂商提供标准接口,实现了数据库访问的方式是在业务方法中直接嵌入SQL语句,SQL语句是面向关系的,依赖于关系模型,所以JDBC方式有点是简单直接,特别是对于小型应用程序。

2.主动域对象模式

主动域对象是实体域对象的一种形式,封装了关系数据模型和数据访问的细节,也就是在J2EE架构中,EJB组件中的实体EJB---EJB本身管理持久化。这样在实体域中封装了数据访问细节,并采用了通过过程域对象负责业务逻辑操作,程序结构更加清晰、易读,提高了程序的灵活性。

 3.CMP模式

CMP模式(Container—Managed Persistent)即容器管理持久化,表示EJB容器封装了对象和关系的映射以及数据访问细节来管理试题EJB的持久化。

CMP和ORM相似之处在于,两者都是提供对象-关系映射服务,都把对象持久化的任务从业务逻辑中分离出来,区别在于CMP负责持久化实体EJB组件,而ORM负责持久化基于JavaBean形式的实体域对象。

4.JDO模式

JDO(java Data Object)是Java对象持久化的新规范,是SUN公司制定的描述对象持久化含义的标准API,严格来说,JDO不是对象-关系映射接口,因为它支持把对象持久化到任意一种存储系统中,包括关系数据库、面向对象数据库、基于XML的数据库。

转载于:https://www.cnblogs.com/jpa2/archive/2012/05/30/2527329.html

解析Hibernate中的持久化—ORM相关推荐

  1. 通过query解析hibernate中的resultTransformer

    转载 http://www.iflym.com/index.php/code/resolve-hibernate-result-transformer-by-query.html 任何包装jdbc的框 ...

  2. Hibernate中保存与持久性以及saveOrUpdate之间的区别

    保存与保存或更新与持久保存在Hibernate中 save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题,就像Hiberna ...

  3. 使用SQLQuery 在Hibernate中使用sql语句

    对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...

  4. ORM进阶之Hibernate中关系映射

    ORM进阶之 ORM简介 ORM进阶之Hibernate简介及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 ORM进阶之Hibernate中一对 ...

  5. hibernate中的PO持久化对象及PO三种状态

    一,认识持久化对象PO: 在hibernate的应用程序中,每一个数据库中的表都对应一个持久化对象PO.PO可以看成是与数据库表相映射的java对象.最简单的PO对应数据库中某个表中的一条记录,多个记 ...

  6. Hibernate中基本概念

    Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...

  7. hibernate中@Entity和@Table的区别

    Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库. 这些普通Java对象被称作Entity Bean. 除了是用Java Pers ...

  8. JPA+Hibernate中常用的注解

    JPA+Hibernate中常用的注解 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体[对 ...

  9. 在Spring、Hibernate中使用Ehcache缓存

    前一篇http://blog.csdn.net/ibm_hoojo/article/details/7739181介绍了Ehcache整合Spring缓存,使用页面.对象缓存:这里将介绍在Hibern ...

  10. Hibernate中自动生成数据库表的两种方式

    第一种方式:Hibernate中利用工具类自动生成数据库表 1.建好POJO object, XML Mapping File,配置文件(hibernate.cfg.xml). 2.编写工具类 imp ...

最新文章

  1. Cisco DHCP and NAT config
  2. [SpringSecurity]web权限方案_用户认证_自定义用户登录页面
  3. mysql行转列函数_一个小知识点-Hive行转列实现Pivot
  4. ICCV 2019 | 厦大提出快速NAS检索方法,四小时搜索NN结构
  5. Oracle数据库用法汇总
  6. 挑战程序设计竞赛(第2版)》
  7. BZOJ 5261 Rhyme
  8. 浅谈5类过零检测电路
  9. 软件工程经济学作业5-7
  10. 联想服务器管理系统,联想服务器的系统监控软件easyManage
  11. POS系统example.launch 的位置_关于信用卡用户使用个人POS机的建议!
  12. 红蜘蛛不受控制解决方案
  13. 使用git从github上稳定下载项目
  14. 东北大学应用数理统计知识点总结——历年真题题型
  15. UESTC 1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。
  16. elasticsearch 父子文档
  17. 了解SSR并实现简单的SSR实例
  18. 用单片机在屏幕上显示字库中的汉字
  19. keep怎么弄轨迹动画_iOS 高德自定义坐标轨迹绘制动画 类似与Keep的轨迹绘制
  20. 简单的canvas动画原理

热门文章

  1. sklearn学习笔记之metrics
  2. c语言~符号_条件编译指令(符号),C语言条件编译指令完全攻略
  3. 提取rosbag中的图像话题存为本地图像
  4. gridview分组android,安卓使用GridView实现网格视图
  5. java 计数程序_Java JVM——4.程序计数器
  6. mysql 增加一列 伦理名_MySQL错误提示mysql Statement violates GTID consistency
  7. Harmony OS — Checkbox多选框
  8. Kotlin — 编程语言
  9. Taro+dva+Typescript 搭建微信小程序架构
  10. 常用指令备忘录----持续更新