zoukankan      html  css  js  c++  java
  • 解析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 等等

  • 相关阅读:
    TcIC(Teamcenter集成CatiaV5)的安装
    centos7上使用bind解析子域名
    Windows10 家庭版(1903/1909)中用RDPWrapper-v1.6.2和autoupdate补丁开启远程桌面功能
    修改SQL Server Express 2019 sa用户密码的方法
    微星B450主板安装64G内存的一个小招数
    缩小xfs文件系统的CentOS/RedHat虚拟机硬盘的迂回方法
    MQL命令的打开方式
    台电TBook二合一本全新安装Windows10
    django_auth_ldap
    开始认真学计算机网络----computer network学习笔记(一)
  • 原文地址:https://www.cnblogs.com/dancser/p/5246608.html
Copyright © 2011-2022 走看看