CN101980213B - 一种基于j2ee的数据持久化方法及系统 - Google Patents

一种基于j2ee的数据持久化方法及系统 Download PDF

Info

Publication number
CN101980213B
CN101980213B CN201010562533A CN201010562533A CN101980213B CN 101980213 B CN101980213 B CN 101980213B CN 201010562533 A CN201010562533 A CN 201010562533A CN 201010562533 A CN201010562533 A CN 201010562533A CN 101980213 B CN101980213 B CN 101980213B
Authority
CN
China
Prior art keywords
interface
persistence
data
database
java
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201010562533A
Other languages
English (en)
Other versions
CN101980213A (zh
Inventor
王帅
屈夏
杨燕
钟华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong Jialian Agel Ecommerce Ltd
Original Assignee
Institute of Software of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201010562533A priority Critical patent/CN101980213B/zh
Publication of CN101980213A publication Critical patent/CN101980213A/zh
Application granted granted Critical
Publication of CN101980213B publication Critical patent/CN101980213B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于J2EE的数据持久化方法和系统,其方法包括:1)用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记;2)构建待持久化Java类对象,对对象的属性值进行赋值;3)构建Java实体对象查询树;4)以创建的待持久化Java类对象和Java实体对象查询树为参数,调用持久化接口进行持久化操作。系统包括数据类型适配器、查询语言解析器和操作语言解析器。本发明的方法和系统解决了Java实体对象与底层数据库的“阻抗不匹配”,屏蔽了异构数据库对信息系统所提供接口的差异,不依赖于任何脚本语言,整个过程完全是Java接口调用,降低了持久化层的开发难度。

Description

一种基于J2EE的数据持久化方法及系统
技术领域
本发明涉及一种在J2EE平台下异构数据库环境中通用的数据持久化方法及系统,目标是提高小型信息系统持久层的开发效率、降低在异构数据库之间的迁移成本。
背景技术
作为信息持久化的主要手段,数据库已经成为绝大多数信息系统中不可或缺的一部分。为了满足各种各样的数据库应用需求,大量的异构数据库应运而生。目前在信息系统中使用较为广泛的异构数据库有:
●关系型数据库:建立在关系数据模型上,将数据分解成为二维数据表进行存储。关系数据库具有数据结构化强、数据独立性大、数据冗余较多等特点,其对于数据读、写的表现比较均衡。
●对象数据库:将面向对象的方法和数据库技术结合起来,使数据库的分析、设计最大程度地与人们对客观世界的认识相一致,其读写的表现比较均衡,但整体性能要比关系数据库稍逊一筹。
●XML数据库:建立在XML格式文档的基础上,能够对半结构化和具有一定层次结构的数据进行有效的存取管理,特别适用于管理和查询网络数据,其读写的表现比较均衡,整体性能要比对象数据库更差,但是由于XML格式信息更适于在网络中传输并且其数据结构便于人类理解,XML数据库仍然在数据库的使用中占有一席之地。
●目录数据库:一种基于目录服务的数据库,对于读取操作做了特别的优化,因而更适用于读数据比写数据次数大的多的信息系统。
此外,随着Internet的广泛普及,Web信息系统的数量突飞猛增。Web服务器作为连接客户端和数据库服务器的一个中间层,既要对用户的访问请求进行分析和处理,又要和数据库进行数据交互。为了实现Web服务器的模块化和层次化,系统设计开发时都会把Web服务器划分为负责分析和处理用户访问请求的业务逻辑层以及负责与数据库服务器进行交互的数据持久层。于是,如何使信息系统的数据持久层方便、快捷、高效的与各种异构数据库之间进行交互成为了一个重要的研究课题。
为了方便用户在J2EE平台上实现对数据库的访问,J2EE推出了一系列访问数据库的标准接口,如Java Database Connectivity (Oracle Corporation.JDBC[EB/OL].http://java.sun.com/products/jdbc/overview.html)、Java Naming and Directory Interface(OracleCorporation.JNDI[EB/OL].http://java.sun.com/products/jndi/overview.html)等。使用这些接口有很多的好处:首先,利用标准接口开发的信息系统不但可以跨平台运行,更可以在同构数据库之间不受数据库供应商的限制;其次,标准接口通常都使用该种数据库的主流语言,并保留了其查询语言的全部能力,允许用户调用存储过程、执行特殊自定义查询甚至使用与数据库相关的特性操作;最后,直接使用标准接口会获得很好的操作性能。然而直接使用标准接口也会有很多不便:一、开发人员必须确保数据库资源得到了妥善的处理。其中最显著的问题是能否有效的管理数据库连接。在打开并使用完数据库连接之后(或者遇到异常时)必须确保将其正确的关闭,否则就有可能耗尽数据库连接从而导致系统崩溃。二、直接使用标准接口编程意味着开发人员需要在代码中构造与数据库相关的查询语句,一旦数据模型发生了变化,那么必须手工修改四处散布的查询语句以及代码。三、大多数标准接口所提供的API方法都可能抛出已检测的DBException,开发人员不仅要保证捕获这些异常,而且还要保证一旦异常抛出会执行相应的清除工作。此外,DBException的异常处理逻辑往往非常相似,导致持久层中会出现大量重复代码,降低了系统的可维护性。四、直接使用标准接口往往会导致应用程序与数据源之间的高度耦合,而高耦合、高重复是使得程序难以测试的两个主要原因(J.B.Rainberger,Scott Stirling.JUnit Recipes:Practical Methods for Programmer Testing[M].Manning Publications Co.,2005.)。
鉴于直接使用标准数据库接口的诸多弊端,一些持久化中间件试图在标准接口之上提供一层轻量级的封装来解决这些问题(汪萌,曲俊华.基于Hibernate技术的持久层解决方案及实现[J].计算机系统应用,2010,(03).)。这些中间件为用户隐藏了使用标准接口的大部分细节,带来了透明的数据持久化体验。相对于直接使用标准接口,使用持久化中间件可以帮助开发人员节省大量的时间。但持久化中间件也存在一个重要的缺陷,即:只提供了对于某一个标准接口的封装,使用这些中间件进行数据持久化仍然会引起信息系统与底层的数据库较高的耦合度,如果信息系统由于某种原因要将现有数据库更换为另一种异构数据库(如从关系数据库变成目录数据库),则需要付出较为沉重的代价。
更重量级的J2EE持久层框架弥补了持久层中间件在异构数据库集成方面的不足,它们符合目前J2EE平台的持久化规范,并且可以集成各种异构数据库的标准访问接口。然而这些功能强大的持久层框架往往非常复杂而且体积庞大。例如:DataNucleus(DaanucleusCommunity.Daanucleus[EB/OL].http://www.datanucleus.org/.)2.1.0Release的核心JAR包的大小就接近2MB。不仅如此,要想使用DataNucleus的全部功能还需要许多额外的JAR包,如asm、ehcache、poi等,共计19.5MB。如此重量级的持久化框架对于一些小型Web信息系统来说实在过于庞大,程序员要熟练掌握类似的持久化框架并发挥它的优势也绝非易事。
综上,J2EE平台下的已有数据持久化方法的缺点如下:
第一,标准接口功能强大却难以使用;
第二,简单的持久化中间件虽然在一定程度上简化了标准接口的使用,但仍然因为与数据库类型高度耦合而受到了限制;
第三,功能强大的持久化框架可以让我们彻底摆脱对于底层数据库的考虑、专心于业务逻辑的处理,却结构复杂且难于掌握。
针对需要快速开发的小型信息系统,需要一种简单易用、能够低成本的在各种异构数据库之间进行迁移的J2EE数据持久化方法。该方法接口明确、易于开发、所有操作完全符合面向对象的思想、能够集成可通过J2EE标准接口访问的多种异构数据库、只有很少或者没有第三方依赖、能够通过对Java实体对象进行CRUD(Wikipedia.CRUD[EB/OL].http://en.wikipedia.org/wiki/Create,_read,_update_and_delete)操作。使用该方法进行开发的Web信息系统,能够达到简单便捷的构建系统持久化层、通过简单配置即可实现异构数据库之间的持久化迁移。
发明内容
本发明的目的在于克服现有持久化技术中存在的一系列问题,提供J2EE环境下的通用数据持久化方法及系统。
本发明的技术方案为:一种基于J2EE的数据持久化方法,包括以下步骤:
1)用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记;
2)构建待持久化Java类对象,对对象的属性值进行赋值;
3)构建Java实体对象查询树。
4)以创建的待持久化Java类对象和Java实体对象查询树为参数,调用持久化接口进行持久化操作。
所述的映射元数据包括类元数据和属性元数据,类元数据指定Java实体对象类中的主键属性并描述Java实体对象类与底层数据库结构之间的映射关系;属性元数据描述Java实体对象属性与底层数据库数据项之间的关系。
所述持久化接口包括isObjectExist接口、saveObject接口、loadObject接口、getObjects接口、updateObject接口、updateObject接口和deleteObject接口,其中,
isObjectExist接口判断待持久化Java类对象是否已经存在;
saveObject接口保存待持久化Java类对象到底层数据库中;
loadObject接口从数据库中读取一个满足约束条件的对象;
getObjects接口从数据库中读取所有满足约束条件的对象;
updateObject接口将数据库中满足约束条件的对象进行更新;
deleteObject接口从数据库中删除符合约束条件的对象。
所述持久化操作的方法为:
A、从待持久化Java类提供的数据读取接口,读取Java实体对象数据域的值,将所述值转换为底层数据库数据要求的类型和格式;
B、将Java实体对象查询树解析为与底层数据库相对应的数据查询约束语句;
C、按照底层数据库操作语言要求生成数据库操作语句;
D、以C步骤生成的数据库操作语句为参数,调用底层数据库的标准接口,进行数据操作。
将所述值转换类型和格式的方法为:
第一步将所述值按照底层数据库的类型与格式进行重新组装;
第二步调用数据汇的赋值函数完成组装后数据的持久。
所述查询树包括逻辑节点和表达式节点。
所述逻辑节点包含一个或多个逻辑或表达式节点作为子节点;表达式节点表达属性名、属性值及属性名和属性值之间的关系。
所述的数据库操作语句以持久化接口类型区分操作类型,以数据查询约束语句表示查询约束条件,采用对象类的映射元数据指定操作位置。
本发明的另一个目的是提供基于J2EE的数据持久化系统,包括数据类型适配器、查询语言解析器和操作语言解析器
数据类型适配器,将Java实体对象数据域的值转换成为符合底层数据库要求的格式和类型。
查询语言解析器,将Java实体对象查询树解析为相应的数据查询约束语句;
操作语言解析器,根据调用的持久化接口类型、标记待持久化Java类对象的映射元数据和数据查询约束语句生成数据库操作语句。
与现有数据持久化方法相比,本发明的方法解决了如下问题:
第一,通过向用户提供一组纯Java的异构数据库通用访问接口,屏蔽了异构数据库对信息系统所提供接口的差异,使信息系统与底层数据库类型完全解耦,把接口使用者从大量的数据库配置细节和操作编码当中解放出来。
第二,借助关于持久化类的一些映射信息和数据类型适配器,程序员不必考虑Java实体对象与底层数据库的“阻抗不匹配”(田珂,谢世波,方马.J2EE数据持久层的解决方案[J].计算机工程,2003,(22).),降低了信息系统持久化层的开发难度。
第三,使用Java Annotation(Oracle Corporation.JDBC[EB/OL].http://download.oracle.com/javase/1.5.0/docs/guide/language/annotations.html)实现对Java类对象的标记,实现了配置文件与实体数据的完整统一,避免了在配置文件与实体数据分离模式下对其一进行修改所造成的不同步性。
第四,进行数据持久化时不依赖于任何脚本语言,整个过程完全是Java接口调用,与数据库相关的操作语言由框架根据Java类及其注释统一生成,减轻了开发者的负担,避免了由于开发者对数据库语言使用不规范造成的数据损毁。
附图说明
图1是数据持久化方法的流程框图;
图2是转换数据类型和格式的方法流程示意图;
图3是Java实体对象查询树示意图。
图4是本发明系统中各模块协作示意图。
图5是实施例中的基于异构数据库的轻量级持久层框架的结构示意图。。
具体实施方式
以下结合具体实施例和附图对本发明方法进行详细说明。
本发明方法旨在为小型Web信息系统开发者提供一个快速搭建数据持久层的途径,为了满足绝大多数小型信息系统的数据持久化需求而又不至于过于臃肿,本方法将数据持久操作抽象为六种持久化操作接口。各接口的参数及返回值如表1所示。使用这些接口,用户可以直接面向被映射元数据标记过的Java实体对象实现数据的持久化。
表1LAPFA数据库统一访问接口
Figure BSA00000363341100061
本发明的方法为:
1)用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记;
2)通过调用待持久化类的默认构造方法创建待持久化Java类的对象,并通过调用对象属性赋值函数对对象的属性值进行赋值;
3)根据持久化操作的具体需要,利用自定义的查询结构构建Java实体对象查询树。
4)以创建的待持久化对象和Java实体对象查询树为参数,根据需要调用上述表1中的持久化接口进行持久化操作,操作步骤如下:
A、从待持久化Java类提供的数据读取接口,读取Java实体对象数据域的值,将所述值转换为底层数据库数据要求的类型和格式;
B、将Java实体对象查询树解析为与底层数据库相对应的数据查询约束语句;
C、根据所调用的持久化接口类型,和第A、B步生成的结果按照底层数据库操作语言要求生成数据库操作语句;
D、以C步骤生成的数据库操作语句为参数,调用底层数据库的标准接口,进行数据操作。
将Java实体对象在非面向对象的异构数据库中进行持久化的最大障碍就是实体对象与各种异构数据库之间的“阻抗不匹配”。上述二者之间的“阻抗不匹配”体现在“数据结构”和“数据类型与格式”两个方面。数据结构的不匹配是指Java实体对象所采用的数据结构与数据库所采用的数据结构的不一致性。这一点在关系数据库中尤为明显:Java实体对象采用嵌套的层次结构表示,而关系数据库采用单一的二维表。本发明方法采用用与底层数据库相关的注释语言对持久化的Java类进行映射元数据标记,即将Java实体对象中的结构和字段与底层数据库的相关结构和字段进行一一映射,消除它们之间的数据结构不匹配。
映射元数据分为两类:类元数据和属性元数据。类元数据用于指定Java实体对象类中的主键属性并描述Java实体对象类与数据库结构之间的映射关系。如:在关系数据库中对象与表之间的映射,在目录服务数据库中对象与条目之间的映射等。属性元数据用于描述Java实体对象属性与数据库数据项之间的关系。如:在关系数据库中属性名与表中列名,对象属性类型和SQL数据类型之间的映射。
数据类型与格式的不匹配是指Java实体对象中属性的类型和数据格式与数据库中对应数据项的类型和格式的不一致。比如,在Java实体类中的一个属性java.util.Date birthday=newjava.util.Date(1985,10,1);在保存到LDAP数据库前需要将其转换成String类型的“19851001000000z”。为了解决数据类型与格式不匹配,本发明方法引入了数据类型适配器。在使用本发明方法进行数据存取时,数据类型适配器会从数据源读取数据,将其按照底层数据库的类型与格式进行重新组装,最后调用数据汇的赋值函数完成数据的持久,当从底层数据库中提取到相应数据时,也可以根据需要的格式重新恢复数据的格式和类型,在此所述的重新组装可以是数据类型和格式的双向转换,参见图2所示。
数据查询是数据持久化层工作的一个必不可少的功能点,在这个功能点上,方便灵活的表示查询约束条件显得尤为重要。本发明方法采用Java实体对象查询树解析的数据查询约束语句表示查询约束条件,一方面保证了约束条件表示覆盖的广泛性,另一方面也使得查询约束条件可以完全使用Java实体类对象构建的树形结构表示,使其彻底与底层数据库解耦。
查询树包括两类节点:逻辑节点和表达式节点,两者采用组合模式共同构造查询树。逻辑节点有一个或多个逻辑或表达式节点作为子节点,逻辑节点本身还要保存其子节点之间的逻辑关系,这些逻辑关系是指数据库查询中表达式之间的“与”、“或”、“非”等逻辑关系.。表达式节点没有子节点,但要保存三个重要信息:属性名、属性值以及属性名和属性值之间的关系,是指“相似”、“大于”等数据库查询约束条件中变量名和变量值之间的关系。参见图3中的查询树,则将该查询树解析为SQL中查询约束语句为“(age>20AND sn=wang)OR(age<21 and NOT sex=male)”。
数据库操作语言是应用程序向数据库发送请求的唯一载体。本发明方法设计了一种在Java环境下能满足系统接口需求、简单易用且可以灵活表示多种异构数据库操作的数据库操作语言。该数据库操作语言使用接口函数区分操作类型、采用上述定义的Java对象组成的查询树表示查询约束条件,借助对象类的映射元数据指定操作位置,实现了持久化操作的无脚本化。在进行数据持久化操作时,与底层数据库相关的操作语言解析器完全可以根据使用者调用的持久化接口类型、待持久化对象所标记的映射元数据和Java实体对象查询树来构造出底层数据库的查询语句。
图4表明了本发明的基于J2EE的数据持久化系统中的各模块之间是如何协同工作的。
本发明的持久化系统,包括映射元数据读取器、数据类型适配器、查询语言解析器、持久化接口调用器和操作语言解析器
映射元数据读取器对待持久化的Java类进行映射元数据标记并读取映射元数据;
数据类型适配器,将Java实体对象数据域的值转换成为符合底层数据库要求的格式和类型
查询语言解析器,将Java实体对象查询树解析为与底层数据库相对应的数据查询约束语句;
持久化接口调用器,根据需要调用表1中的持久化接口。
操作语言解析器,根据调用的持久化接口类型、待持久化对象所标记的映射元数据和查询语言解析器生成的数据查询约束语句生成数据库操作语句。
为了验证本发明方法的有效性,本文利用该方法设计了一个基于异构数据库的轻量级持久层框架LAPFA(Lightweight dAta Persistence Framework for jAva),其整体构架如图5所示。该框架系统包括映射元数据读取器、数据类型适配器、查询语言解析器、持久化接口调用器和操作语言解析器。
下文以Web信息系统中的用户信息作为数据模型,采用标准LDAP目录数据库作为底层数据库结合LAPFA的工作流程,进一步阐述上述构件如何相互配合完成数据持久化。
LAPFA中LDAP目录数据库的映射元数据由两个注释类ClassTag和FieldTag定义,其中ClassTag注释类的说明如下:
表2注释ClassTag属性表
  属性名   类型   说明
  branch   String   类在LDAP中生成entry的位置。
  idFieldName   String   指定类中某一属性为数据的RDN。
  objectClasses   String[]   类在LDAP中对应entry的objectClasses。
其中,[]表示返回类型是一个数组。
FieldTag注释类的说明如下:
表3注释FieldTag属性表
  属性名   类型   说明
  attrID   String   属性在数据库中的字段名。
  attrType   String   属性在数据库中的类型。
  singleValue   boolean   该属性是否为单值属性。
  cascade   boolean   是否级联保存(用于非原生类型)。
  classType   String   指定其Java类名(用于非原生类型)。
Web信息系统中的用户信息User包括以下属性:
表4用户类User属性表
  属性名   类型   说明
  username   String   用户名
  password   byte[]   用户密码
  loginCounter   int   登陆次数
其中,[]表示返回类型是一个数组。
1)首先映射元数据读取器用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记,注释后的代码表如下:
表5用户类User被注释后的代码表
Figure BSA00000363341100091
2)创建了一个待持久化类的对象xw,并将其属性赋值:
3)根据查询需求创建了Java实体类查询对象树and。
4)以创建的待持久化对象xw和Java实体对象查询树and为参数,持久化接口调用器调用持久化接口进行持久化操作,
首先利用对象xw的数据读取接口读取Java实体对象的属性值,利用数据适配器将所述值转换为底层数据库数据要求的类型和格式。
然后调用LAPFA查询语言解析器将Java对象查询树and解析成为符合LDAP协议的数据查询约束语句:&(loginCounter<3)(username~=xiao);
接下来调用LAPFA数据库操作语言解析器,根据调用接口的类型和注释信息,生成数据库操作语句;
最后以上述数据库操作语句为参数,调用LDAP目录数据库在J2EE平台下的标准接口JNDI,完成数据查询操作。
下面是TestDriver类演示了开发者如何使用LAPFA完成数据的持久化过程:
package org.sample;
import........................;
public class TestDriver{
    public static void main(String[]args){
        DatabaseService ds=new JndiDatabaselmpl();
        User xw=new User();
        //set xw.userName with″XiaoWang″
        //and all other fields with proper values.
        //Test if an User Object with key value
        //″XiaoWang″exists in the database;
        boolean isUserExist=ds.isObjectExist(user);
        //Save all the value of xw into database;
        ds.saveObject(user);
        //Load all infomation into another User
        //Object called xwCopy
        User xwCopy=new User();
        xwCopy.setUserName(″XiaoWang″);
        ds.loadObject(xwCopy);
        //Read all users whose loginCounter<3and
        //username likes xiao.
        LessFilter less=new LessFilter(″loginCounter″,3);
        LikeFilter like=new LikeFilter(″username″,″xiao″);
        AndFilter and=new AndFilter(less,like);
        List users=ds.getObjects(org.sample.User.class,and);
        //update xw′s loginCount
        int counter=xw.getLoginCounter()+1;
        xw.setLoginCounter(counter);
        ds.updateObject(xw);
        //delete xw′s all info from the database
        ds.deleteObject(xw);
    }
}
用户调用List user=ds.getObjects(org.sample.User.class,and)并在该接口内部与底层数据库进行持久化操作时LAPFA的工作流程:
第一,创建了一个待持久化类的对象xw,并将其属性赋值。
第二,调用isObjectExist接口判断xw是否存在于数据库中。
第三,调用saveObject接口将xw保存到ldap数据库中。
第四,创建另一个待持久化类的对象xwCopy,并将主键赋值。
第五,利用xwCopy读取刚才存入数据库中的xw信息。
第六,根据查询需求创建了Java实体类查询对象树and。
第七,调用getObjects接口进行数据查询,并将查询结果保存到变量users中。
第八,更改xw的counter属性,并调用updateObject将其在ldap数据库中的数值更新。
第九,调用deleteObject将xw从LDAP数据库中删除。

Claims (7)

1.一种基于J2EE的数据持久化方法,包括下列步骤:
1)用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记;
2)构建待持久化Java类对象,对对象的属性值进行赋值;
3)构建Java实体对象查询树;
4)以创建的待持久化Java类对象和Java实体对象查询树为参数,调用持久化接口进行持久化操作;
所述注释语言将Java实体对象中的结构和字段与底层数据库的相关结构和字段进行一一映射,消除所述结构和字段间的数据结构不匹配;
所述持久化操作为:
A、从待持久化Java类提供的数据读取接口,读取Java实体对象数据域的值,将所述值转换为底层数据库数据要求的类型和格式;
B、将Java实体对象查询树解析为与底层数据库相对应的数据查询约束语句;
C、根据所调用的持久化接口类型,和第A、B步生成的结果按照底层数据库操作语言要求生成数据库操作语句;
D、以C步骤生成的数据库操作语句为参数,调用底层数据库的标准接口,进行数据操作;
所述持久化接口包括isObjectExist接口、saveObject接口、loadObject接口、getObjects接口、updateObject接口和deleteObject接口,其中,
isObjectExist接口判断待持久化Java类对象是否已经存在;
saveObject接口保存待持久化Java类对象到数据库中;
loadObject接口从数据库中读取一个满足约束条件的对象;
getObjects接口从数据库中读取所有满足约束条件的对象;
updateObject接口将数据库中满足约束条件的对象进行更新;
deleteObject接口从数据库中删除符合约束条件的对象。
2.根据权利要求1所述的基于J2EE的数据持久化方法,其特征在于所述的映射元数据包括类元数据和属性元数据,类元数据指定Java实体对象类中的主键属性并描述Java实体对象类与底层数据库结构之间的映射关系;属性元数据描述Java实体对象属性与底层数据库数据项之间的关系。
3.根据权利要求1所述的基于J2EE的数据持久化方法,其特征在于将所述值转换为底层数据库数据要求的类型格式的方法为:
第一步将所述值按照底层数据库的类型与格式进行重新组装;
第二步调用数据库的赋值函数完成组装后数据的持久。
4.根据权利要求1所述的基于J2EE的数据持久化方法,其特征在于所述查询树包括逻辑节点和表达式节点。
5.根据权利要求4所述的基于J2EE的数据持久化方法,其特征在于所述逻辑节点包含一个或多个逻辑或表达式节点作为子节点;表达式节点表达属性名、属性值及属性名和属性值之间的关系。
6.根据权利要求1所述的基于J2EE的数据持久化方法,其特征在于所述的数据库操作语句以持久化接口类型区分操作类型,以数据查询约束语句表示查询约束条件,采用对象类的映射元数据指定操作位置。
7.一种基于J2EE的数据持久化系统,包括:
第一单元,用于用与底层数据库相关的注释语言对待持久化的Java类进行映射元数据标记;所述注释语言将Java实体对象中的结构和字段与底层数据库的相关结构和字段进行一一映射,消除所述结构和字段间的数据结构不匹配;
第二单元,用于构建待持久化Java类对象,对对象的属性值进行赋值;
第三单元,用于构建Java实体对象查询树;
第四单元,用于用以创建的待持久化Java类对象和Java实体对象查询树为参数,调用持久化接口进行持久化操作;
所述持久化接口包括isObjectExist接口、saveObject接口、loadObject接口、getObjects接口、updateObject接口和deleteObject接口,其中,
isObjectExist接口判断待持久化Java类对象是否已经存在;
saveObject接口保存待持久化Java类对象到数据库中;
loadObject接口从数据库中读取一个满足约束条件的对象;
getObjects接口从数据库中读取所有满足约束条件的对象;
updateObject接口将数据库中满足约束条件的对象进行更新;
deleteObject接口从数据库中删除符合约束条件的对象;
所述持久化操作为:
A、从待持久化Java类提供的数据读取接口,读取Java实体对象数据域的值,将所述值转换为底层数据库数据要求的类型和格式;
B、将Java实体对象查询树解析为与底层数据库相对应的数据查询约束语句;
C、根据所调用的持久化接口类型,和第A、B步生成的结果按照底层数据库操作语言要求生成数据库操作语句;
D、以C步骤生成的数据库操作语句为参数,调用底层数据库的标准接口,进行数据操作。
CN201010562533A 2010-11-23 2010-11-23 一种基于j2ee的数据持久化方法及系统 Active CN101980213B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010562533A CN101980213B (zh) 2010-11-23 2010-11-23 一种基于j2ee的数据持久化方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010562533A CN101980213B (zh) 2010-11-23 2010-11-23 一种基于j2ee的数据持久化方法及系统

Publications (2)

Publication Number Publication Date
CN101980213A CN101980213A (zh) 2011-02-23
CN101980213B true CN101980213B (zh) 2012-09-19

Family

ID=43600715

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010562533A Active CN101980213B (zh) 2010-11-23 2010-11-23 一种基于j2ee的数据持久化方法及系统

Country Status (1)

Country Link
CN (1) CN101980213B (zh)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102841892A (zh) * 2011-06-21 2012-12-26 中国科学院计算技术研究所 一种关系数据的服务封装系统和方法
CN103020064A (zh) * 2011-09-20 2013-04-03 佳都新太科技股份有限公司 一种通过注解方式生成查询条件的方法和配置
CN103123592B (zh) * 2011-11-21 2017-05-31 腾讯科技(深圳)有限公司 开放平台中应用程序的访问方法及系统
CN103164270B (zh) * 2011-12-12 2017-08-04 阿里巴巴集团控股有限公司 java系统应用程序编程接口调用方法及系统
CN103678354B (zh) * 2012-09-11 2017-05-03 中国移动通信集团公司 基于云计算平台的本地关系型数据库节点调度方法和装置
CN102984206B (zh) * 2012-11-02 2016-06-08 曙光云计算技术有限公司 在云计算环境中增加业务对象的方法
CN102981832B (zh) * 2012-11-02 2016-08-31 曙光云计算技术有限公司 在云计算环境下修改业务对象的方法
CN102982130A (zh) * 2012-11-16 2013-03-20 深圳市融创天下科技股份有限公司 一种nosql与rdbms的数据库同步方法和系统
CN103019845B (zh) * 2012-12-10 2015-06-03 中国人民解放军理工大学 一种异构数据库平台下应用程序零修改迁移的方法
CN103955370B (zh) * 2014-04-28 2017-07-07 华为软件技术有限公司 一种领域对象模型的持久化装置和方法
CN105518673B (zh) 2014-07-15 2020-07-07 微软技术许可有限责任公司 管理数据摄取
CN104182484B (zh) * 2014-08-07 2019-07-02 北京京东尚科信息技术有限公司 一种实现HBase数据与Java域对象映射的方法和装置
CN105488056B (zh) * 2014-09-17 2019-04-09 阿里巴巴集团控股有限公司 一种对象处理方法与设备
CN104978182B (zh) * 2014-10-15 2018-05-22 武汉安天信息技术有限责任公司 一种将JAR文件解析成java的方法及系统
CN104598615A (zh) * 2015-01-31 2015-05-06 广州亦云信息技术有限公司 一种支持数据持久化的内存存取方法和装置
CN104932892B (zh) * 2015-06-19 2017-11-21 浪潮软件集团有限公司 一种基于WebWorker实现的Web应用中间件异步嵌套调用方法
CN105138692B (zh) * 2015-09-18 2018-07-03 山大地纬软件股份有限公司 一种大数据访问和管理的中间件定制系统与方法
CN105488147A (zh) * 2015-11-26 2016-04-13 南京莱斯信息技术股份有限公司 一种基于sql模板的持久化方法
CN105763421A (zh) * 2016-02-17 2016-07-13 浪潮通用软件有限公司 一种基于Jms的消息平台设计方法
CN106844693A (zh) * 2017-01-24 2017-06-13 浙江大学 一种openEHR Template到关系数据库的转换方法
CN107193957A (zh) * 2017-05-23 2017-09-22 努比亚技术有限公司 结构化查询语言的生成方法、终端及计算机可读存储介质
CN107391622B (zh) * 2017-07-06 2020-12-04 联动优势科技有限公司 一种数据访问方法及设备
CN107463625B (zh) * 2017-07-07 2021-09-28 中国建设银行股份有限公司 基于元模型的数据结构建立方法、系统、装置及存储介质
CN107679093B (zh) * 2017-09-07 2020-04-07 北京神州绿盟信息安全科技股份有限公司 一种数据查询方法及装置
CN109901934B (zh) * 2017-12-11 2022-01-28 北京京东尚科信息技术有限公司 生成接口帮助文档的方法和装置
CN108090205A (zh) * 2017-12-27 2018-05-29 南京熊猫电子股份有限公司 一种基于j2ee的部队后勤数据统一管理系统
CN109271403A (zh) * 2018-09-28 2019-01-25 北京京东金融科技控股有限公司 一种数据查询的操作方法、装置、介质及电子设备
CN109471869A (zh) * 2018-12-27 2019-03-15 山东浪潮商用系统有限公司 一种本地数据库自动升级的方法及系统
CN111190917A (zh) * 2019-06-10 2020-05-22 腾讯科技(深圳)有限公司 一种数据处理方法及装置
CN110647568B (zh) * 2019-09-16 2023-12-12 金色熊猫有限公司 一种图数据库数据转化为编程语言数据方法及装置
CN111125440B (zh) * 2019-12-09 2022-08-23 重庆邮电大学 一种基于Monad的持久层复合条件查询方法与存储介质
CN111680041B (zh) * 2020-05-31 2023-11-24 西南电子技术研究所(中国电子科技集团公司第十研究所) 面向异构数据的安全高效存取方法
CN112181996B (zh) * 2020-09-02 2022-09-16 河海大学 关系数据库统一数据存取中间件方法及系统
CN112306463B (zh) * 2020-10-14 2024-02-20 深圳市中农网有限公司 基于POJO的mybatis生成方法、系统、存储介质及设备
CN113760981A (zh) * 2021-01-13 2021-12-07 北京京东乾石科技有限公司 一种数据查询方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6912541B1 (en) * 2000-12-01 2005-06-28 Unisys Corporation Method and apparatus for implementing persistent data in object oriented programs
CN101067814A (zh) * 2007-05-10 2007-11-07 浪潮集团山东通用软件有限公司 数据访问层Xml格式数据与关系数据间的映射转换方法
CN101110030A (zh) * 2007-08-23 2008-01-23 南京联创科技股份有限公司 基于java的数据库持久层的开发方法
CN101645074A (zh) * 2009-09-07 2010-02-10 浪潮集团山东通用软件有限公司 一种访问不同类型关系型数据库的方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2858500B1 (fr) * 2003-08-01 2006-01-13 Cit Alcatel Procede et dispositif de gestion configurable de la persistance de donnees d'equipements de reseau de communications

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6912541B1 (en) * 2000-12-01 2005-06-28 Unisys Corporation Method and apparatus for implementing persistent data in object oriented programs
CN101067814A (zh) * 2007-05-10 2007-11-07 浪潮集团山东通用软件有限公司 数据访问层Xml格式数据与关系数据间的映射转换方法
CN101110030A (zh) * 2007-08-23 2008-01-23 南京联创科技股份有限公司 基于java的数据库持久层的开发方法
CN101645074A (zh) * 2009-09-07 2010-02-10 浪潮集团山东通用软件有限公司 一种访问不同类型关系型数据库的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
欧黎源等."基于JPA的数据持久化模型设计与实现".《计 算 机 工 程》.2009,第35卷(第20期),76,77,80. *
苗晓辉."基于J2EE的数据持久化的研究与实现".《计 算 机 工 程》.2007,第33卷(第5期),272-274. *

Also Published As

Publication number Publication date
CN101980213A (zh) 2011-02-23

Similar Documents

Publication Publication Date Title
CN101980213B (zh) 一种基于j2ee的数据持久化方法及系统
CN101405729B (zh) 具有增量式视图维护的映射体系结构
Vassiliadis et al. ARKTOS: towards the modeling, design, control and execution of ETL processes
Caldas et al. Methodology for the integration of project documents in model-based information systems
CN105518676B (zh) 查询任意半结构化数据的通用的sql增强以及高效地支持这样的增强的技术
US7673282B2 (en) Enterprise information unification
US8819046B2 (en) Data query translating into mixed language data queries
CN100565510C (zh) 数据访问层类生成器
Syme et al. Expert F♯
KR102229010B1 (ko) 데이터를 모델링하기 위한 시스템 및 방법
US20140280030A1 (en) Method of converting query plans to native code
US7877397B2 (en) Extensible command execution for entity data model platform
US20080183725A1 (en) Metadata service employing common data model
Dittrich et al. Component database systems
Barrasa et al. Building Knowledge Graphs
WO2023123287A1 (zh) 分子数据存储方法及装置、应用方法及装置
Peng et al. Using object deputy model to prepare data for data warehousing
de Bruijn Semantic integration of disparate data sources in the COG project
Brandani Multi-database Access from Amos II using ODBC
Vysniauskas et al. Mapping of OWL ontology concepts to RDB schemas
Danturthi Comparative study of web application development with sql server and db4o
WO2023151239A1 (zh) 一种创建微服务的方法及相关设备
Aggarwal et al. Employing graph databases as a standardization model for addressing heterogeneity and integration
Pagnamenta Design and initial implementation of a distributed xml database
Mordinyi et al. Semantic data integration: Tools and architectures

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20191014

Address after: 250100 area B, floor 19, building 1, Xinsheng building, 1299 Xinluo street, high tech Zone, Jinan City, Shandong Province

Patentee after: Shandong Jialian Agel Ecommerce Ltd

Address before: 100190 No. four, 4 South Street, Haidian District, Beijing, Zhongguancun

Patentee before: Institute of Software, Chinese Academy of Sciences