一种基于orm架构的高效数据库访问的实现方法及装置的制作方法

文档序号:6426612阅读:147来源:国知局
专利名称:一种基于orm架构的高效数据库访问的实现方法及装置的制作方法
技术领域
本发明涉及一种基于对象关系映射(Object Relational Mapping,0RM)架构的高效数据库访问的实现方法及其装置。
背景技术
目前,面向对象的程序设计方法是企业级应用开发环境中的主流开发方法,而关系型数据库是企业级应用中存放数据的主流数据存储方式,因此在开发过程中,一些业务逻辑常常需要直接调用结构化查询语言(Structured Query Language, SQL)语句来实现,但这样开发的缺点是,到处是SQL语句,开发效率很低、出错率很高、程序易维护性、可扩展性很差等缺点。
为了提高项目的灵活性,提高开发效率,ORM是ー个很好的选择,当数据库模型改变时,不再需要关注逻辑代码和SQL语句中涉及到该模型的所有改动,甚至不做改动就可以满足要求。但是,已有ORM概念的系统的开源框架大多存在以下缺点一、有些功能很强大,但结构复杂,不易于程序的移植和代码的复用,増加了学习使用的成本;ニ、有些结构简单,但功能又比较弱,对结构的分层不明确,既不利于代码的自动生成,又不利于分エ协作,因此,开发效率低;三、有些系统ORM使用不当,会造成执行效率的下降,因为ORM事实上是通过存储空间的牺牲来换取大量数据库访问性能的提升,如果空间使用不当也会造成性能的下降。

发明内容
本发明的目的在于提供一种基于ORM架构的高效数据库访问的实现方法及装置,能更好的解决面向对象的程序设计方法与关系数据库在开发过程中互不融合的技术问题。根据本发明的ー个方面,本发明提供的一种基于ORM架构的高效数据库访问的实现方法包括A)代码生成器模块根据数据库表,生成数据库表的数据实体代码;B) ORM模块根据所述数据实体代码,建立实体数据与其对应数据库的映射关系;C)数据访问模块利用所述映射关系,访问用户请求的数据库。所述步骤A)包括代码生成器模块根据用户通过界面展现模块输入的请求,选择要自动生成代码的数据库表;代码生成器模块选择要生成代码的类,循环遍历所述数据库表的每个字段,将数据库表的每个字段和类的规则进行分析处理,并逐行生成包括数据实体代码和数据规则代码的类代码;代码生成器模块将所述数据实体代码和数据规则代码分别保存至数据实体模块和数据规则模块中。所述分析包括对当前字段和类规则进行的词法分析、括号匹配算法分析、标志符点位分析、变量定义算法分析、类结构算法分析。执行所述步骤A前还包括代码生成器模块监测数据库,并在监测到数据库表存在改动时,通过界面展现模块通知用户。所述步骤B)中实体数据与其对应数据库的映射关系包括实体和数据库之间的映射关系、实体字段和数据库表字段之间的映射关系、某个实体作为另外一个实体的一个属性字段时与数据库表之间的映射关系、某个实体作为另外一个实体的一个集合属性时与数据库表之间的映射关系。
所述步骤B)还包括ORM模块分析实体数据,获取并缓存实体信息;根据所述实体信息,得到用于生成SQL语句的组件;分析数据库的SQL语法,并利用分析结果,通过所述组件将实体数据和映射关系拼接成需要的SQL语句,以供数据库操作。所述步骤C)包括数据访问模块建立数据访问资源池,并从所述数据访问资源池中取出用于访问数据库的连接资源;数据访问模块定义基类接口函数,并得到用于访问数据库的所述基类接口函数的派生类接口函数;数据访问模块利用所述连接资源,通过所述派生类接口函数访问数据库,并对数据库进行操作。所述派生类接口函数包括Oracle数据库访问类具体接口函数、MS SQL Server数据库访问类具体接口函数、DB2数据库访问类具体接口函数、Sybase数据库访问类具体接口函数、mysql数据库访问类具体接口函数。 执行所述步骤C)前还包括业务功能模块根据来自界面展现模块的用户请求,向业务流程模块提供多个基本业务功能;业务流程模块将所述多个基本业务功能进行合成,形成一个完整的业务流,以便进行数据库访问。根据本发明的另一个方面,本发明提供的一种基于ORM架构的高效数据库访问的实现装置包括代码生成器模块,用于根据数据库表,生成数据库表的数据实体代码;ORM模块,用于根据所述数据实体代码,建立实体数据与其对应数据库的映射关系;数据访问模块,用于利用所述映射关系,访问用户请求的数据库。所述实现装置还包括界面展现模块,用于接收用户输入的请求;数据实体模块,用于保存数据库表的数据实体的代码;
数据规则模块,用于保存数据库表的数据规则的代码。所述实现装置还包括业务功能模块,根据来自界面展现模块的用户请求,向业务流程模块提供多个基本业务功能;业务流程模块,用于将所述多个基本业务功能进行合成,形成一个完整的业务流。与现有技术相比,本发明的有益效果在于I、本发明解决了面向对象的程序设计方法与关系数据库在开发过程中互不融合的问题,实现了通过不同开发语言如C#、Java, C++、VB、Delphi等等,对不同的数据库如Oracle> MS SQL Server、DB2、Sybase、Access 等等进行高效的访问;
2、本发明通过采用有效的分层架构设计,以面向对象的方式在各层之间传递业务数据,提高了程序的可维护性和可扩展性,并且各层之间分エ明确,便于敏捷开发和多人合作开发;3、本发明通过自动生成大部分SQL语句和实体类组件,减轻了应用开发人员的负荷,使其把更多的精力投入到视图层设计和系统业务逻辑功能实现等上来。


图I是本发明实施例的一种基于ORM架构的高效数据库访问的实现方法流程图;图2是本发明实施例的一种基于ORM架构的高效数据库访问的实现装置结构示意图;图3是图2所示代码生成器模块工作流程图;图4是图2所示ORM模块工作流程图;图5是图2所示数据访问模块工作流程图。
具体实施例方式以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明的优选实施例仅用于说明和解释本发明,并不用于限制本发明。图I显示了本发明实施例的一种基于ORM架构的高效数据库访问的实现方法流程图,如图I所示,步骤包括步骤101 :代码生成器模块根据数据库表,生成数据库表的数据实体代码;步骤102 :对象关系映射(Object Relational Mapping, 0RM)模块根据所述数据实体代码,建立实体数据与其对应数据库的映射关系;步骤103 :数据访问模块利用所述映射关系,访问用户请求的数据库。上述步骤101包括代码生成器模块根据用户通过界面展现模块输入的请求,选择要自动生成代码的数据库表;代码生成器模块选择要生成代码的类,循环遍历所述数据库表的每个字段,将数据库表的每个字段和类的规则进行分析处理,并逐行生成包括数据实体代码和数据规则代码的类代码;代码生成器模块将所述数据实体代码和数据规则代码分别保存至数据实体模块和数据规则模块中。也就是说,代码生成器模块生成数据实体代码外,还可以生成数据规则代码、存储过程代码、触发器代码、数据库结构文档代码、SQL脚本代码等等,用于帮助开发人员快速映射到数据库中的业务数据模型,实现快速开发。随着程序规模和业务的扩展,保存在数据实体模块和数据规则模块中的代码将会不断扩展,有效降低开发人员的开发工作量,保证代码的质量。上述步骤101还包括代码生成器模块监测数据库,当监测到数据库表存在改动时,通过界面展现模块通知用户,提醒开发人员是否生成相应的代码。上述步骤102还包括0RM模块分析实体数据,获取并缓存实体信息;根据所述实体信息,得到用于生成SQL语句的组件;分析数据库的SQL语法,并利用分析结果,通过所述组件将实体数据和映射关系拼接成需要的SQL语句,以供数据库操作。也就是说,ORM模块用对象的形式表示数据库中的数据,并通过面向对象的方式将这些对象组织起来,自动生成具有增加、删除、修改、查找等功能的SQL语句,以便对不同类型的数据库进行操作。其中,所述分析包括对当前字段和类规则进行的词法分析、括号匹配算法分析、标志符点位分析、变量定义算法分析、类结构算法分析。上述步骤102中的实体数据与其对应数据库的映射关系包括实体和数据库之间的映射关系、实体字段和数据库表字段之间的映射关系、某个实体作为另外一个实体的一·个属性字段时与数据库表之间的映射关系、某个实体作为另外一个实体的一个集合属性时与数据库表之间的映射关系。上述步骤103包括数据访问模块建立数据访问资源池,并从所述数据访问资源池中取出用于访问数据库的连接资源;数据访问模块定义基类接口函数,并得到用于访问数据库的所述基类接口函数的派生类接口函数;数据访问模块利用所述连接资源,通过所述派生类接口函数访问数据库,并对数据库进行操作。也就是说,数据访问模块建立与数据的连接,以数据工厂的方式定义基类接口函数,并使用派生类接口函数实现对各种数据库的访问。所述派生类接口函数包括Oracle数据库访问类具体接口函数、MS SQL Server数据库访问类具体接口函数、DB2数据库访问类具体接口函数、Sybase数据库访问类具体接口函数、mysql数据库访问类具体接口函数。所述数据库为关系数据库,例如Oracle、Mysql、Access、Db2、MS SQL Server>Sybase 等。图2显示了本发明提供的一种基于ORM架构的高效数据库访问的实现装置结构示意图,如图2所示,包括代码生成器模块d,用于根据数据库表,生成数据库表的数据实体代码。换句话说,所述代码生成器模块d从数据库中提取数据模型信息,并生成数据实体代码,帮助开发人员快速映射数据库中的业务数据模型,最优化快速开发,由于随着程序规模和业务的扩展,数据规则模块e和数据实体模块f中的代码会不断的扩展,代码生成器d自动生成了这部分代码,有效的解决了开发人员的工作量问题,并保证了代码质量。进一步地,所述代码生成器模块d还用于生成数据实体代码、存储过程的代码、触发器的代码、数据库结构文档的代码、SQL脚本的代码等等。ORM模块h,用于根据所述数据实体代码,建立实体数据与其对应数据库的映射关系。换句话说,所述ORM模块h建立了实体和数据库之间的映射关系、实体字段和数据库表字段之间的映射关系、某个实体作为另外一个实体的一个属性字段时与数据库表之间的映射关系、某个实体作为另外一个实体的一个集合属性时与数据库表之间的映射关系。进一步地,所述ORM模块h分析实体数据,获取并缓存实体信息;根据所述实体信息,得到用于生成SQL语句的组件;分析数据库的SQL语法,并利用分析结果,通过所述组件将实体数据和映射关系拼接成需要的SQL语句,以供数据库操作。也就是说,所述ORM模块h用于负责将数据库中的业务数据用对象的形式表示出来,并通过面向对象(Object-Oriented)的方式将这些对象组织起来,自动生成SQL各种语句(如増加、删除、修改、查找),实现系统业务逻辑的过程,同时定义一些用于访问数据库的接ロ基类。数据访问模块g,用于利用所述映射关系,访问用户请求的数据库。换句话说,所述数据访问模块g用于从数据库中存取资源。进ー步地,所述数据访问模块g建立数据访问资源池,并从所述数据访问资源池中取出用于访问数据库的连接资源;数据访问模块g定义基类接ロ函数,并得到用于访问数据库的所述基类接ロ函数的派生类接ロ函数;数据访问模块g利用所述连接资源,通过所述派生类接ロ函数访问数据库,并对数据库进行操作。进ー步地,所述数据访问模块g以数据エ厂的方式向数据规则模块e屏蔽所有的SQL语句以及数据库类型差异,提供数据访问资源池(Data Access Pool)等。本发明创新点体现在代码生成器模块d、数据访问模块g和ORM模块h,其中 与现有的代码生成器相比,本发明所述代码生成器模块d具有以下创新点I、所述代码生成器模块d能根据具体业务生成基于数据规则的数据规则代码和基于数据实体的数据实体代码;2、所述代码生成器模块d能将生成的代码生成源文件直接嵌入到开发工具指定的程序中,做到一步到位;3、所述代码生成器模块d有ー个监视线程不断的监视指定的数据库,并在数据库的表结构、字段、字段类型等有改动时,能自动提醒开发人员是否要将新生成的代码生成源文件直接嵌入到开发工具指定的程序;4、所述代码生成器模块d能够根据登陆人信息,时间,数据库类型等自动生成代码文件的注释信息。与现有的ORM模块相比,本发明所述ORM模块h的创新点在于I、所述ORM模块h能够根据数据实体模块f传入的实体数据和数据规则,以反射的机制与数据库映射,自动高效的生成SQL语句,并把SQL语句传入数据库执行;2、所述ORM模块h能够针对不同的数据库如0racle、MS SQL Server>DB2>Sybase>Access等等,高效的生成各自的SQL语句。与现有的数据访问模块相比,本发明所述数据访问模块g的创新点在于I、所述数据访问模块g以数据エ厂的方式定义基类接ロ函数,并使用其派生类接ロ函数实现对各种数据库的访问;2、所述数据访问模块g定义了一个数据访问资源池(Data Access Pool),进行数据库访问时,毎次向数据访问资源池申请一定数量的连接资源,并得到其中ー个连接,用完后归还所述的连接资源;3、所述数据访问模块g对数据库的访问采用锁定和释放等机制,保证对数据库更新、保存、删除,查找不会出现互斥和资源不够等现象。所述实现装置还包括界面展现模块a,用于接收用户输入的请求,还用于向用户端提供应用程序的访问、返回数据等。其数据采集的结果以实体对象(Entity object)提交给业务逻辑层处理。
数据实体模块f,用于保存数据库表的数据实体的代码。所述数据实体模块f还用于承载业务数据,是实际业务数据的载体,包含业务数据模型的单元描述,可以直接由数据库中的某张表或视图生成,也可以根据需要手工创建。数据规则模块e,用于保存数据库表的数据规则的代码。所述数据规则模块e还用于实现对数据库访问的增加、删除、修改、查询接口,并向业务功能模块b或业务流程模块c返回结果。本发明创新点还体现在数据实体模块f和数据规则模块e上,其中
与现有的数据实体模块相比,本发明所述数据实体模块f的创新点在于I、所述数据实体模块f的所有代码都可以由代码生成器模块d自动生成;2、所述数据实体模块f中各类与数据库表--对应,能把取值以实体对象的方式
传送到ORM模块h中,以便进行映射。与现有的数据规则模块相比,本发明所述数据规则模块e具有以下创新点I、所述数据规则模块e的大部分代码能够通过代码生器模块d自动生成,例如增力口、删除、修改接口的代码;2、所述数据规则模块e中各类与数据库表一一对应,容易移植,结构清晰。所述实现装置还包括业务功能模块b,根据来自界面展现模块a的用户请求,向业务流程模块提供多个基本业务功能。也就是说,所述业务功能模块b用于负责基本业务功能的实现,例如根据界面展现模块a发送的用户请求实现各种情况的处理、各种算法的实现、并向业务流程模块提供数据C、界面展现模块a提供数据等。业务流程模块C,用于将所述多个基本业务功能进行合成,形成一个完整的业务流,例如工作流等。本发明采用三层架构,包括表现层、业务逻辑层、数据访问层。其中,所述界面展现模块a属于表示层,所述业务功能模块b、所述业务流程模块C、所述代码生成器模块d属于业务逻辑层,所述数据规则模块e、所述数据实体模块f、所述数据访问模块g、所述ORM模块h属于数据访问层。所述三层架构有利于降低各层之间的依赖,使开发人员可以只关注
其中某一层。图3显示了图2所示代码生成器模块工作流程图,如图3所示,步骤包括步骤302 :用户通过客户端界面输入服务器IP、数据库类型、服务器类型、用户名、密码后,与数据库服务器建立连接,加载数据库名,并选择数据库,登陆所选择的数据库;步骤304 :加载所选数据库的所有表,选择要自动生成代码的表;步骤306 :读取所选择的表信息,如字段,表空间,主键等,并选择要生成代码的类型;步骤308 :循环遍历所选择表的各字段,并判断是否全部遍历,如果是,则执行步骤318,否则,执行步骤310 ;步骤310 :读取数据库当前选择表的字段信息,如字段名、类型、长度等;步骤312 :生成类的说明文件信息,如空间名等;步骤314 :对当前数据库表的字段和类的规则进行词法分析、括号匹配算法分析、标志符点位分析、变量定义算法分析、类结构算法分析等分析处理;
步骤316 :以追加的方式逐行生成包括数据实体代码和数据规则代码的类代码,并根据语法进行着色、缩进等处理;步骤318 :将以上生成的源代码在界面展现模块上显示出来,井生成文本文件存到电脑硬盘指定位置。图4显示了图2所示ORM模块工作流程图,如图4所示,步骤包括步骤402 =ORM模块建立实体数据与其对应数据库的映射关系,即ORM模块描述实体和数据库之间的映射关系、描述实体字段和数据库表字段之间的映射关系、某个实体作为另外一个实体的ー个属性字段时与数据库表之间的映射关系、某个实体作为另外ー个实体的ー个集合属性时与数据库表之间的映射关系;步骤404 =ORM模块的实体分析器分析实体数据,获取并缓存实体信息,即所述实体分析器对实体对象进行必要的数据分析,获得实体对象的各种信息并缓存,以便在后续的工作中直接提取数据;步骤406 0RM模块的ORM引擎根据所述实体信息,得到用于生成SQL语句的组件,即所述ORM引擎实现用于自动生成SQL语句(如増加、删除、修改、查询等功能)的组件;步骤408 :0RM模块的SQL语句分析组件分析数据库的SQL语法,并利用分析結果,通过步骤406中所述的组件将实体数据和映射关系拼接成需要的SQL语句,即所述SQL语 句分析组件对不同数据库的SQL语法进行分析,通过对SQL语句分析,把实体对象和关系拼接成需要的SQL语句,为ORM引擎服务;步骤410 :0RM模块的数据库操作库通过调用ADO. net、ODBC、JDBC、Source Pro等工具所提供的数据库访问接ロ,将SQL语句传入数据库,以便对不同类型数据库进行操作。图5显示了图2所示数据访问模块工作流程图,如图5所示,步骤包括步骤502 :数据访问模块的数据访问エ厂获取数据库连接字符串,并解密,建立与数据库的联系;实现数据访问资源池,并从所述数据访问资源池中取出或释放连接资源;向ORM模块返回数据库连接对象,如MS SQL Server对象、Oracle对象,DB2对象等等;步骤504 :数据访问模块的数据库资源池组件实现对数据访问资源的验证、创建、取得或归还资源对象、垃圾回收、锁定,解锁等功能;步骤506 :数据访问模块实现对数据库访问的基类接ロ函数的定义;步骤508 :实现Oracle数据库访问类具体接ロ函数,并通过所述具体接ロ函数访问Oracle数据库;步骤510:实现MS SQL Server数据库访问类具体接ロ函数,并通过所述具体接ロ函数访问MS SQL Server数据库;步骤512 :实现DB2数据库访问类具体接ロ函数,并通过所述具体接ロ函数访问DB2数据库;步骤514 :实现Sybase数据库访问类具体接ロ函数,并通过所述具体接ロ函数访问Sybase数据库;步骤516 :实现mysql数据库访问类具体接ロ函数,并通过所述具体接ロ函数访问mysql数据库。用户通过本发明所述装置访问某ー个数据库时,可以利用其需要访问的数据库的具体接ロ函数访问所述数据库,即步骤508至步骤516所述的任意一歩。
综上所述,本发明的技术效果在于I、本发明把一些有规则的模块独立出来,使大量SQL代码可以完全由代码生成器生成自动,不仅保证了程序的质量,还极大的提高了开发的效率;2、本发明通过采用ORM机制,各层之间通过面向对象的方式传递业务数据,使程序很容易修改,不存在一处改动影响全局的问题,易维护性强;3、本发明各模块之间分工明确,易于移植,即使换了项目,底层代码可以公用。尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员 可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。
权利要求
1.一种基于ORM架构的高效数据库访问的实现方法,其特征在于,包括 A)代码生成器模块根据数据库表,生成数据库表的数据实体代码; B)对象关系映射(ObjectRelational Mapping,0RM)模块根据所述数据实体代码,建立实体数据与其对应数据库的映射关系; C)数据访问模块利用所述映射关系,访问用户请求的数据库。
2.根据权利要求I所述的实现方法,其特征在于,所述步骤A)包括 代码生成器模块根据用户通过界面展现模块输入的请求,选择要自动生成代码的数据库表; 代码生成器模块选择要生成代码的类,循环遍历所述数据库表的每个字段,将数据库表的每个字段和类的规则进行分析处理,并逐行生成包括数据实体代码和数据规则代码的类代码; 代码生成器模块将所述数据实体代码和数据规则代码分别保存至数据实体模块和数据规则模块中。
3.根据权利要求2所述的实现方法,其特征在于,执行所述步骤A前还包括 代码生成器模块监测数据库,并在监测到数据库表存在改动时,通过界面展现模块通知用户。
4.根据权利要求I所述的实现方法,其特征在于,所述步骤B)中实体数据与其对应数据库的映射关系包括 实体和数据库之间的映射关系、实体字段和数据库表字段之间的映射关系、某个实体作为另外一个实体的ー个属性字段时与数据库表之间的映射关系、某个实体作为另外ー个实体的ー个集合属性时与数据库表之间的映射关系。
5.根据权利要求4所述的实现方法,其特征在于,所述步骤B)还包括 ORM模块分析实体数据,获取并缓存实体信息; 根据所述实体信息,得到用于生成SQL语句的组件; 分析数据库的SQL语法,并利用分析結果,通过所述组件将实体数据和映射关系拼接成需要的SQL语句,以供数据库操作。
6.根据权利要求I所述的实现方法,其特征在于,所述步骤C)包括 数据访问模块建立数据访问资源池,并从所述数据访问资源池中取出用于访问数据库的连接资源; 数据访问模块定义基类接ロ函数,并得到用于访问数据库的所述基类接ロ函数的派生类接ロ函数; 数据访问模块利用所述连接资源,通过所述派生类接ロ函数访问数据库,并对数据库进行操作。
7.根据权利要求6所述的实现方法,其特征在于,执行所述步骤C)前还包括 业务功能模块根据来自界面展现模块的用户请求,向业务流程模块提供多个基本业务功能; 业务流程模块将所述多个基本业务功能进行合成,形成一个完整的业务流,以便进行数据库访问。
8.一种基于ORM架构的高效数据库访问的实现装置,其特征在于,包括代码生成器模块,用于根据数据库表,生成数据库表的数据实体代码; ORM模块,用于根据所述数据实体代码,建立实体数据与其对应数据库的映射关系; 数据访问模块,用于利用所述映射关系,访问用户请求的数据库。
9.根据权利要求8所述的实现装置,其特征在于,还包括 界面展现模块,用于接收用户输入的请求; 数据实体模块,用于保存数据库表的数据实体的代码; 数据规则模块,用于保存数据库表的数据规则的代码。
10.根据权利要求8所述的实现装置,其特征在于,还包括 业务功能模块,根据来自界面展现模块的用户请求,向业务流程模块提供多个基本业务功能; 业务流程模块,用于将所述多个基本业务功能进行合成,形成一个完整的业务流。
全文摘要
本发明公开了一种基于ORM架构的高效数据库访问的实现方法及装置,方法包括以下步骤代码生成器模块根据数据库表,生成数据库表的数据实体代码;ORM模块根据所述数据实体代码,建立实体数据与其对应数据库的映射关系;数据访问模块利用所述映射关系,访问用户请求的数据库。本发明实现了通过不同开发语言高效访问不同的数据库;通过采用有效的分层架构设计,以面向对象的方式在各层之间传递业务数据,提高了程序的可维护性和可扩展性,并且各层之间分工明确,便于敏捷开发和多人合作开发;通过自动生成大部分SQL语句和实体类组件,减轻了应用开发人员的负荷,使其把更多的精力投入到视图层设计和系统业务逻辑功能实现等上来。
文档编号G06F17/30GK102841889SQ201110165590
公开日2012年12月26日 申请日期2011年6月20日 优先权日2011年6月20日
发明者柯志勇, 程兵旺 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1