解析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(转载)的更多相关文章
- 【Hibernate】解析hibernate中的缓存
Hibernate中的缓存一共有三种,一级缓存.二级缓存.查询缓存.缓存除了使用Hibernate自带的缓存,还可以使用redis进行缓存,或是MongoDB进行缓存. 所使用的Demo: User. ...
- Hibernate中的持久化类
一.持久化类概述 就是一个JavaBean,这个JavaBean与表建立了映射关系.这个类就称为是持久化类. 简单理解为 持久化类=JavaBean+映射文件. 持久化类:是指其实例需要被Hibern ...
- Hibernate原理解析-Hibernate中实体的状态
- 三、hibernate中持久化类的使用
hibernate的持久化类 持久化:将内存中的一个对象持久化到数据库中的过程,hibernate就是一个用来进行持久化的框架 持久化类:一个Java对象与数据库中表建立了关系映射,那么这个类在hib ...
- Hibernate中的PO
Hibernate中的PO PO就是持久化对象,它的作用就是完成持久化操作,即通过以面向对象的方式操作该对象对数据库中的数据执行增.删.改.查的操作. Hibernate是低侵入式的设计,完全采用Ja ...
- 使用SQLQuery 在Hibernate中使用sql语句
对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.下面来描述如何使用这个API进行查询. 1.标量查询(Scalar q ...
- hibernate中session的线程安全问题
Hibernate的基本特征是完成面向对象的程序设计语言到关系数据库的映射,在Hibernate中使用持久化对象PO(Persistent Object)完成持久化操作,对PO的操作必须在Sessio ...
- ORM进阶之Hibernate中对象的三大状态解析
ORM进阶之 ORM简单介绍 ORM进阶之Hibernate简单介绍及框架搭 ORM进阶之Hibernate的三大对象 ORM进阶之Hibernate中对象的三大状态解析 在Hibernatea中每一 ...
- xml解析----java中4中xml解析方法(转载)
转载:https://www.cnblogs.com/longqingyang/p/5577937.html 描述 XML是一种通用的数据交换格式,它的平台无关性.语言无关性.系统无关性.给数据集成与 ...
随机推荐
- 向STM32 CUBE MX 生成的工程里移植stemwin
我参考这个文章做的: http://bbs.armfly.com/read.php?tid=1678 这次添加的是没有os的版本 另外跟用不用hal库没关系 1. keil自带了emwin 2. 用c ...
- Unity中各类物理投射性能横向比较
最近在优化摄像机部分代码,抽了个时间对物理投射这块进行了系统性的测试,发现了不少东西 测试工程下载地址: http://files.cnblogs.com/files/hont/RaycastTest ...
- Netsuite SuiteScript > Search Advance feature,搜索中使用 'OR' operation
Sample in online help //Define search filter expression var filterExpression = [ [ 'trandate', 'onOr ...
- JS正则表达式大全
转自:http://wenku.baidu.com/link?url=3y930kC7F6D3wQdMjQ3fVDmiA9Wfebs_QK0UB3N3mFaEoKg4ytZORPopxufeYA6si ...
- Linux启动过程详述
http://www.ibm.com/developerworks/cn/linux/kernel/startup/index.html Linux启动第1步:引导内核 Linux启动第2步:内核部分 ...
- drawable animation
drawable 动画,帧动画: 1 定义动画xml文件 <?xml version="1.0" encoding="utf-8"?> <an ...
- 在Linux中查看所有正在运行的进程
可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息. ps命令能提供一份当前进程的快照.如果想状态可以自动刷新,可以 ...
- centos升级glibc(升级到2.14版)
1.下载源码包 到http://ftp.gnu.org/gnu/glibc/下载glibc-2.14.tar.xz 2.解压 tar glibc-2.14.tar.gz 3.创建build目录 cd ...
- nginx基本配置和参数说明
#运行用户user nobody;#启动进程,通常设置成和cpu的数量相等worker_processes 1; #全局错误日志及PID文件#error_log logs/error.log;#err ...
- 测试oracle数据库的脱机备份和恢复
环境:windows7.Oracle11g 一.脱机备份 脱机备份是指在数据库关闭情况下的数据备份,也称为冷备份. 在书上学到的备份步骤: 1.记录所要备份数据库文件所在的操作系统路径: 2.关闭数据 ...