java 什么是持久性,java中什么是持久层
其实java 什么是持久性的问题并不复杂,但是又很多的朋友都不太了解java中什么是持久层,因此呢,今天小编就来为大家分享java 什么是持久性的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
java中什么是持久层
持久层:
所谓持久,就是把数据保存到可以永久保持的存储设备当中。一般来说,持久更为直接的理解就是对数据库的各种操作,如CRUD(增加,删除,修改,查询),更新等操作,
持久层,就是把持久的动作封装成一个独立的层,这是为了降低功能代码之间的关联。创建一个更清晰的抽象,提高代码的内聚力,降低代码的耦合度,从而增强代码的要劳动局生和可重用性。
实现持久层的框架有: JDBC, Hibernate,Mybatis,JPA等技术
什么是持久化
1.什么是持久化?本人找了好多文章都没有找到满意的答案,最后是从孙卫琴写的《精通Hibernate:Java对象持久化技术详解》中,看到如下的解释,感觉还是比较完整的。摘抄如下:狭义的理解:“持久化”仅仅指把域对象永久保存到数据库中;广义的理解,“持久化”包括和数据库相关的各种操作。●保存:把域对象永久保存到数据库。●更新:更新数据库中域对象的状态。●删除:从数据库中删除一个域对象。●加载:根据特定的OID,把一个域对象从数据库加载到内存。●查询:根据特定的查询条件,把符合查询条件的一个或多个域对象从数据库加载内在存中。2.为什么要持久化?持久化技术封装了数据访问细节,为大部分业务逻辑提供面向对象的API。●通过持久化技术可以减少访问数据库数据次数,增加应用程序执行速度;●代码重用性高,能够完成大部分数据库操作;●松散耦合,使持久化不依赖于底层数据库和上层业务逻辑实现,更换数据库时只需修改配置文件而不用修改代码。
什么是数据持久层
2EE的三层结构是指表示层(Presentation),业务逻辑层(Business Logic)以及基础架构层(Infrastructure),这样的划分非常经典,但是在实际的项目开发法中,开发者通常对三层结构进行扩展来满足一些项目的具体要求,一个最常用的扩展就是将三层体系扩展为五层体系,即表示层(Presentation),控制/中介层(Controller/Mediator)、领域层(Domain),数据持久层(Da
ta Persistence)和数据源层(Da
ta Source)。它其实是在三层架构中增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间。由于对象范例和关系范例这两大领域之间存在阻抗不匹配,所以把数据持久层单独作为J2EE体系的一个层提出来的原因就是能够在对象-关系数据库之间提供一个成功的企业级映射解决方案,尽最大可能弥补这两种范例之间的差异。
三种持久层主流解决方案1、JDBC许多开发者用JDBC进行数据库程序的开发。此中方式很多情况下都使用DAO模式,采用SQL进行查询。虽然用此方式可以使应用程序代码与具体的数据库厂商和数据库位置无关,不过JDBC是低级别的数据库访问方式,JDBC并不支持面向对象的数据库表示。JDBC数据库表示完全围绕关系数据库模型。在大型应用程序的DAO中书写这样的代码,维护量是非常大的。
2、EJB在J2EE的规范中,为EJB定义了两种持久化的解决方案:一种是BMP,另一种是CMP。其中CMP不需要将SQL语句加入到代码中。目前,在采用J2EE的应用中,EJB CMP方式得到了广泛应用。更加引人注意的是,随着EJB规范的发展,CMP也包含了一些高级关系的内容。但是,CMP的使用比较复杂,对很多开发人员来说比较难以掌握。而且,不是在所有的情况下都适合在系统中采用EJB,而且想要非常清楚的了解EJB规范也是非常费时的。在用EJB编码前,先要让专家理解API,然后需要了解每一个容器部署时所要关注的技术
。此外,许多情况下商用容器的性能和支持也不是很好。
3、JDOJDO是一个存储java对象的规范,JDO规范1.0的提出可以使你将精力集中在设计Java对象模型,然后在企业应用软件架构的不同层面中存储传统的Java对象(Plain Old Java Objects,简称POJOs),采用JDOQL语言进行SQL操作。一些公司(包括sun)企图根据JDO规范进行设计并实现JDO产品,然而他们都不能很好的进行实现,并且性能优化上比较差。
持久就是对数据的保持,即对程序状态的保持。通常通过数据库实现持久层是把数据库实现这块当作一个独立逻辑拿出来。
说白了,就是数据库程序是在内存中的,为了使程序运行结束后状态得以保存,就要保存到数据库使用ORM(对象关系数据库映射)技术可以避免代码直接操作数据库,增加可移植性,可扩展性,可维护性。
持久层其目的是通过持久层的框架将数据库存储从服务层中分离出来是,持久层框架有两种方向:直接自己编写JDBC等SQL语句(如iBatis);使用O/R Mapping技术实现的Hibernate和JDO技术;当然还有EJB中的实体Bean技术。
java.beans的长期持久性
从 v1.4开始,java.beans包提供了对长期持久性的支持,即以其属性值的文本表示形式读取或写入 bean。这些属性值被视为 bean,它们被递归地读取或写入,以捕获其公共可用状态。此方法适用于长期存储,因为它只依赖于公共 API而不是很可能发生更改的私有实现。
--------------------------------------------------------------------------------
注:持久性方案无法自动实例化自定义内部类,比如用于事件处理程序的类。通过使用 EventHandler类而不是自定义事件处理程序的内部类,可以避免此问题。
--------------------------------------------------------------------------------
可分别使用 XMLDecoder和 XMLEncoder类读取和写入XML格式的 bean。持久性方案的一个显著特性是,读入 bean不需要该 bean的特定信息。
另一方面,读出 bean有时需要 bean类型的特定信息。如果可以只使用属性的无参数构造方法以及公共 getter和 setter方法表达 bean的状态,则无需 bean的特定信息。否则,bean需要一个自定义持久委托,即负责写出特殊类型的 bean的对象。从 java.awt.Component中遗传的JDK中提供的所有类及其所有属性都将自动拥有持久委托。
如果需要(或选择)为 bean提供持久委托,则可以通过使用 DefaultPersistenceDelegate实例或通过创建自己的 PersistenceDelegate子类来实现。如果 bean需要持久委托的惟一原因是因为用户想调用 bean使用属性值作为参数的构造方法,则可以使用无参数的 DefaultPersistenceDelegate构造方法创建 bean的持久委托。否则,用户需要实现自己的持久委托,对此,可能需要以下类:
PersistenceDelegate
这是一个抽象类,所有持久委托都是从它遗传的。子类应该使用它所知的 bean类型信息来提供创建 bean和恢复其状态所需的任何 Statement和 Expression。
Statement
表示某一对象上的单个方法的调用。包括该方法的参数集合。
Expression
用于返回一个值的那些方法的 Statement的子类。
一旦创建了一个持久委托,就可以使用 XMLEncoder的 setPersistenceDelegate方法注册它。
相关文档
有关概述、架构和教程文档的信息,请参阅:
JavaBeans,《The Java Tutorial》中的一部分。
Long-Term Persistence,The Swing Connection中的一篇文章
关于java 什么是持久性和java中什么是持久层的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。