hibernate中持久化是什么

此文章从源于转载

 

 

1.1    什么是持久化

几乎所有的程序都需要持久化数据。持久化是程序开发中的一个基础问题。当一个信息系统不能保存用户所输入的数据的时候,一旦主机出现诸如断电的故障,那么系统便变得毫无价值。当我们讨论java中的持久化的时候,我们通常指的是用SQL在关系型数据库中存取数据。我们从如何使用Java来完成这样的任务说起。然后我们就可以继续我们持久化的讨论,以及如何在面向对象的程序中去使用它们。

1.1.1        关系型数据库

和其他许多开发人员一样,你可能会和关系型数据库打交道。事实上,我们当中的大部分人都在使用关系型数据库。关系型技术已经被广泛使用。光这一点就足以成为许多公司选择它的原因了。但是光从口头上并不能体现它的价值。关系型数据库拥有强健和弹性的数据管理方法以至于遇到一些意外也不会造成系统的崩溃。

关系型数据并不是针对Java程序而设计的,当然也不是针对其他程序而设计的。关系型技术为不同的程序之间或同一程序的不同技术(例如事务引擎和报告引擎)之间提供了一种共享数据的方式。关系型技术也是许多毫不相干的系统和平台之间的共同特性。因此,关系型数据模型通常是企业级的业务模型的表现方式。

关系数据库管理系统使用提供了SQL的程序接口,因此,我们也可以把关系型数据库称之为SQL数据库管理系统或者我们也可以直接叫做SQL数据库。

1.1.2 理解SQL

为了更好地使用Hibernate,你可以理解关系模型以及SQL。你需要运用你的SQL的质量是来调试Hibernate的性能。对于许多需要在持久化反复做的工作,Hibernate会帮你的自动生成代码,但是如果你想利用好SQL数据库的话,那么你的持久化知识不能仅仅局限于Hibernate。应当知道底层的目标就是强健的,高效的管理持久化数据。

首先让我们浏览一下在本书中使用的SQL技术。你可以把SQL用作DDL(数据定义语言)去创建一个数据库定义,在这个过程中,你会使用到Create或者Alter语句。在创建表格之后,你还可以把SQL用作DML(数据控制语言)。通过DML,你可以达到控制和恢复数据的目的。你可以通过插入,更新和删除来完成数据控制,通过限定,投影和连接来完成数据的恢复。你可以通过grouporderaggregate操作来更好的输出数据。你甚至可以把一个SQL语句嵌套早另外一个语句里面来完成子查询。你可能使用SQL很多年了,已经非常熟悉其中的操作了。从我们自身的经验来看,SQL有时候不太容易记忆。为了理解本书,我们将使用SQL中相同的术语和概念,因此如果你对刚才所提到的概念不熟悉的话,我建议你去阅读一下附录A

开发Java数据库应用程序的时候,SQL的知识是必备的。如果你需要了解更多细节的话,建议你去看一下Dan Tow的书SQL Tuning。你也可以阅读An Intrudction To Database Systems去获得有关数据库的理论,概念以及思想。关系型数据库只是ORM的一部分,另外一部分则来自Java程序中需要被持久化的对象。

1.1.3        Java中使用SQL

当你在Java程序中使用SQL数据库的时候,你需要通过JDBC API来使用SQL。在Java中,你可以通过手工来写SQL,或者通过自动生成工具来生成SQL。你可以通过JDBCSQL传递参数,发起查询,浏览结果,并且能够恢复数据。这些都是底层的数据访问任务,应用程序员关注的应该是业务逻辑,而不是这些数据访问。我们不应该关注这些呆板机械的工作。

我们真正需要关心的是如果向数据库存取复杂的数据,以及从数据库中恢复这些数据。

因为数据存取是如此的枯燥无聊,我们经常会问,关系数据模型以及SQL是面向对象持久化的正确选择吗?我们可以毫不犹豫的告诉你,是的。我可以列举许多理由来告诉你为什么SQL数据库能够支配计算机工业。关系型数据库管理系统也是唯一被证明的数据管理技术,当然在Java项目中也是经常被用到。

然而,在过去的15年里面,开发者经常会说的就是范式不匹配。这种不匹配解释了为什么我们每次在项目中都需要花费很大的精力去完成数据的持久化。这种范式指的是对象模型和关系模型,也可以是面向对象的编程和SQL。我们通过一个问题来探讨不匹配的问题,那就是在面向对象的开发中什么才是持久化。首先我们需要扩充一下我们在本章开头关于数据持久化的定义,这里给出的新的定义更加深入的描述数据的维护和存取。

1.1.4        面向对象程序中的持久化

在面向对象的程序中,持久化意味着一个对象的生命期可以超过创建它的程序。对象的状态可以被存储在磁盘中,将来在使用的时候可以将具有相同状态的对象恢复。

应用程序不仅仅局限于持久化单个对象,许多相互关联的对象都需要被持久化并在一个过程中被重新创建。但是大多数对象并不能被持久化,transient对象的生命期也仅仅有创建它的过程决定。几乎所有的java程序都包含大量的这种可以被持久化以及无法被持久化的对象,因此我们需要一个子系统来管理持久化数据。

现代的关系型数据库提供了结构化的数据表达方式,你可以对数据进行排序,查找以及聚集。数据库管理系统负责数据的并发控制和完整性;同时也负责管理在多个用户和程序中共享数据。数据库管理系统也提供了一个数据级的安全保护。当我们在本书中讨论持久化的时候,我们需要考虑下面这些事情:

l         存储,组织和恢复结构化数据

l         并发控制和数据完整性

l         数据共享

尤其是我们需要在使用了领域模型的面向对象的环境中去考虑这些问题。

具有领域模型的应用程序并不能平滑的和业务实体进行对接,对于业务实体,这种应用程序通常有着自己的模型。如果数据库有一个ITEMBID表,那么与此对应,Java应用程序也会定义ITEMBID类。

为了避免和SQL结果集中的行和列直接打交道,业务逻辑通常会和面向领域的对象来打交道。业务逻辑从来都不是在数据库中执行(作为一个SQL存储过程),它们都是由Java来实现。

通过这种方式,业务逻辑可以使用面向对象中的概念,如继承和多态。举例来说,业务逻辑可以使用诸如StrategyMediatorComposite设计模式,这些都应用了多态的概念。在这里可能存在反对的声音:并不是所有的Java程序都是这样设计的。对于简单的应用来说,直接应用JDBC可能来的更直接,更容易理解,而且新版本的JDBC使操作数据也变得更加简单易用。直接使用表格化数据,更直接更容易理解。

但是,在业务逻辑比较复杂的程序中,领域模型能够使代码重用和维护变得更加有意义。在本书中我们关注的是领域模型,因为HibernateORM关注也是这种类型的程序。

如果我们重新考虑SQL和关系数据库,那么就会发现两种范例之中存在着不匹配的情况。

SQL操作的结果通常以表格化的数据来表示。这个Java中对象之间的联系有很大的不同,它们是两种截然不同的模型,并不是同一模型的不同表达方式。

 

带着这种认识,我们来审视这些问题——一些已知的和一些未知的,这些都应该被连接着两种模型的应用程序来解决,包括面向对象的领域模型以及持久关系模型。

 

 

 

hibernate中持久化是什么



11111111

刚学习hibernate,看了一些相关配置,但始终不明白持久化思想是什么.请大侠指点,给点思路.谢谢


思想就是不写sql只写代码(可测试,可验证的代码)


又是一个被名词概念绕晕的可怜孩子。这种太小儿科的太太太简单的问题我来解释一下。

所谓的持久是站在业务模型的角度说的。按照面向对象的分析设计方式,我们先根据业务的形状画出一个对象模型,然后写代码,然后对象之间互相调用,系统就运行起来了。面向对象很牛b,但是有一个巨大的问题,就是所有的对象都是在计算机的内存里的,一旦机器关掉,一切都消失了。于是需要有这样的功能:把内存中的对象保存到数据库里去,需要的时候再从数据库里拿出来。

最简单的方式就是:在对象里面写上sql语句,把对象属性insert/update进去,需要的时候从数据库里面select出数据来,再set到对象属性上。这是最土的办法。这样一来,对象就持久了。

比较炫一点的办法,就是定义一个表,在这个表里记录对象属性和数据库字段的一个对应关系,当我们需要一个对象的时候,就根据这个表自动把对象属性的值赋上,修改后的属性还能自动update回到数据库里去。有了这个功能,对象的使用者就感觉象没有数据库一样,好像这些对象本来就是放在内存中的。这就是orm。

 

22222222222

请问"持久化技术"是什么意思?“持久层”是什么意思?
把一个ResultSet放到一个Array里就是属于一种持久化吗?
谢谢各位!!
 
顾名思义,持久化技术 就是指将数据持久化的技术,将你的数据持久的保存下来,比如保存在文件系统,数据库,或者其他什么你关闭了你的应用甚至关机了那些数据还能完整保存的地方。

持久层,就是软件系统的层次结构中用于实现持久化技术的层。
Q:把一个ResultSet放到一个Array里就是属于一种持久化吗?
A:不是,不过如果你再把这个Array 串行化到文件系统保存下来,就算是持久化了。
 
 
这是个已经被严重“滥用”的用语。
简单的理解,持久化可以在二个层面:应用层和系统层

应用层:
如果关闭(shutdown)你的应用然后重新启动则先前的数据依然存在。
系统层:
如果关闭(shutdown)你的系统(电脑)然后重新启动则先前的数据依然存在


 

3333333333333

要做JAVA web, java语言的基础是必须要扎实的,重点体会面向对象的含义。然后可以利用一点时间学习JSP的基本标签,我感觉jsp只是给java穿了一层华丽的外衣。然后利用javabean实现简单的页面交互。这个时候不要去管页面是否好看,专心做一件事。你能可以利用JDBC连接数据库,实现增删改查等逻辑处理之后,你可以尝试一下struts框架。去体会,为什么要应用框架。当这一切你觉得自己可以搞定之后,你已经可以胜任简单的web工作了。这个时候,你需要完善自己。你可以去学习spring,hibernate框架,你可以去学习下javascript(AJAX),至于美工方面,我的工作不需要,我也没什么兴趣。你要是敢兴趣也可以学习下。但是要记住,每一个方面每时每刻都有人在专注于研究它。也就是所谓的谁谁谁会说谁谁精通XXX,我想,你也应该联系自己,专注于某一个方向。

刚开始html不需要专门去学习,见一个标记了解下可以了,对于Java Web开发了解几个常用的即可,css,js也是一样的暂时你大致了解可以干什么用就可以了,我一般遇到了网上查一下基本就会了,要不就读别人的js,css改成自己的就可以了,而且开发的时候有专门的美工还有前台程序员。另外Java Web 个人觉得如果你的Java基础比较好的话,我觉得JSP Servlet JavaBean JDBC基本不需要专门去学习,如果你认为不是的话,可以先学习这一部分然后写个小程序练练手,框架的话可以先接触下struts和hibernate,不过我觉得面向对象的编程思想体会不深的话很难学好hibernate。学习是一个螺旋式渐进的过程,新鲜的技术你可以去学学无妨,关键是如果你觉得学起来吃力或者举步不前的时候那么应该反思是不是基础不扎实,然后去补补基础。补基础-学习-补基础-再学习我觉得学习就是这样一个循环的过程,另外大二的话可以考虑把基础学扎实点,如果是要就业了那么就学习点时髦的技术,不同时期采用不同学习对策。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值