解析Hibernate中的持久化—ORM
最近一直在学习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相关推荐
- 通过query解析hibernate中的resultTransformer
转载 http://www.iflym.com/index.php/code/resolve-hibernate-result-transformer-by-query.html 任何包装jdbc的框 ...
- Hibernate中保存与持久性以及saveOrUpdate之间的区别
保存与保存或更新与持久保存在Hibernate中 save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题,就像Hiberna ...
- 使用SQLQuery 在Hibernate中使用sql语句
对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...
- ORM进阶之Hibernate中关系映射
ORM进阶之 ORM简介 ORM进阶之Hibernate简介及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 ORM进阶之Hibernate中一对 ...
- hibernate中的PO持久化对象及PO三种状态
一,认识持久化对象PO: 在hibernate的应用程序中,每一个数据库中的表都对应一个持久化对象PO.PO可以看成是与数据库表相映射的java对象.最简单的PO对应数据库中某个表中的一条记录,多个记 ...
- Hibernate中基本概念
Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自 ...
- hibernate中@Entity和@Table的区别
Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库. 这些普通Java对象被称作Entity Bean. 除了是用Java Pers ...
- JPA+Hibernate中常用的注解
JPA+Hibernate中常用的注解 JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体[对 ...
- 在Spring、Hibernate中使用Ehcache缓存
前一篇http://blog.csdn.net/ibm_hoojo/article/details/7739181介绍了Ehcache整合Spring缓存,使用页面.对象缓存:这里将介绍在Hibern ...
- Hibernate中自动生成数据库表的两种方式
第一种方式:Hibernate中利用工具类自动生成数据库表 1.建好POJO object, XML Mapping File,配置文件(hibernate.cfg.xml). 2.编写工具类 imp ...
最新文章
- Cisco DHCP and NAT config
- [SpringSecurity]web权限方案_用户认证_自定义用户登录页面
- mysql行转列函数_一个小知识点-Hive行转列实现Pivot
- ICCV 2019 | 厦大提出快速NAS检索方法,四小时搜索NN结构
- Oracle数据库用法汇总
- 挑战程序设计竞赛(第2版)》
- BZOJ 5261 Rhyme
- 浅谈5类过零检测电路
- 软件工程经济学作业5-7
- 联想服务器管理系统,联想服务器的系统监控软件easyManage
- POS系统example.launch 的位置_关于信用卡用户使用个人POS机的建议!
- 红蜘蛛不受控制解决方案
- 使用git从github上稳定下载项目
- 东北大学应用数理统计知识点总结——历年真题题型
- UESTC 1638 红藕香残玉簟秋,轻解罗裳,独上兰舟。
- elasticsearch 父子文档
- 了解SSR并实现简单的SSR实例
- 用单片机在屏幕上显示字库中的汉字
- keep怎么弄轨迹动画_iOS 高德自定义坐标轨迹绘制动画 类似与Keep的轨迹绘制
- 简单的canvas动画原理
热门文章
- sklearn学习笔记之metrics
- c语言~符号_条件编译指令(符号),C语言条件编译指令完全攻略
- 提取rosbag中的图像话题存为本地图像
- gridview分组android,安卓使用GridView实现网格视图
- java 计数程序_Java JVM——4.程序计数器
- mysql 增加一列 伦理名_MySQL错误提示mysql Statement violates GTID consistency
- Harmony OS — Checkbox多选框
- Kotlin — 编程语言
- Taro+dva+Typescript 搭建微信小程序架构
- 常用指令备忘录----持续更新