CN114138748A - 数据库映射文件生成方法、装置、设备及存储介质 - Google Patents
数据库映射文件生成方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114138748A CN114138748A CN202111455826.3A CN202111455826A CN114138748A CN 114138748 A CN114138748 A CN 114138748A CN 202111455826 A CN202111455826 A CN 202111455826A CN 114138748 A CN114138748 A CN 114138748A
- Authority
- CN
- China
- Prior art keywords
- file
- database
- entity
- plug
- target
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/81—Indexing, e.g. XML tags; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Computing Systems (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种数据库映射文件生成方法、装置、设备及存储介质,涉及数据库技术领域,用于提升数据库映射文件的生成效率,该方法包括:在目标Maven项目编译过程中,触发所述目标Maven项目对应的项目对象模型文件中引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得所述实体关系图文件包括的至少一个实体元素集合;创建实体类集合,并将所述至少一个元素集合存放至所述实体类集合中;调用所述映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及数据库技术领域,提供一种数据库映射文件生成方法、装置、设备及存储介质。
背景技术
Java是一种面向对象的企业级应用开发语言,在使用Java语言进行应用系统开发时,一般都离不开对数据库的操作,Java语言对数据库操作暴露的是接口,具体的实现是由数据库的提供商自行实现的。
目前,较为常用Java语言类的数据层操作对象关系映射(Object RelationalMapping,ORM)框架有Hibernate以及Mybatis,Mybatis由于其框架轻巧以及使用灵活而应用广泛。但是,使用mybatis时需要根据数据表字段创建映射(mapper)文件,并且需要配置它们之间的依赖关系,这样的工作很琐碎和重复,虽然mybatis官方提供了工具辅助进行创建,但是这些工具仍然需要手动添加大量的配置参数,每次还需要手动执行才能够生成新的mapper文件,这个过程仍然比较繁琐。
因此,如何更为便捷的生成mapper文件时目前亟待解决的问题。
发明内容
本申请实施例提供一种数据库映射文件生成方法、装置、设备及存储介质,用于提升数据库映射文件的生成效率。
一方面,提供一种数据库映射文件生成方法,所述方法包括:
在目标Maven项目编译过程中,触发所述目标Maven项目对应的项目对象模型文件中引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得所述实体关系图文件包括的至少一个实体元素集合;
创建实体类集合,并将所述至少一个元素集合存放至所述实体类集合中;
调用所述项目对象模型文件引入的映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
一方面,提供一种数据库映射文件生成装置,所述装置包括:
元素解析单元,用于在目标Maven项目编译过程中,触发所述目标Maven项目对应的项目对象模型文件中引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得所述实体关系图文件包括的至少一个实体元素集合;
元素存放单元,用于创建实体类集合,并将所述至少一个元素集合存放至所述实体类集合中;
映射文件生成单元,用于调用所述项目对象模型文件引入的映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
可选的,所述装置还包括插件配置单元,用于:
响应于插件自定义操作,创建所述映射文件生成插件,并将所述映射文件生成插件安装到Maven仓库,其中,所述映射文件生成插件继承指定抽象类;
创建所述目标Maven项目,并在所述项目对象模型文件中引入映射文件生成插件;
在所述项目对象模型文件中配置所述映射文件生成插件的资源属性,资源属性至少包括:所述实体关系图文件的读取地址以及生成的映射文件的输出地址。
可选的,所述元素解析单元,具体用于:
解析所述实体关系图文件中的数据库配置字段,获取所述目标数据库的类型信息;
解析所述实体关系图文件中各个列字段,并将解析得到的所述各个列字段各自对应的列标识和字段属性值,按照键值对的方式存储至字典文件中;
解析所述实体关系图文件中各个表格字段,并将解析得到的所述各个表格字段各自对应的表格标识和对象属性值,按照键值对的方式存储至表格文件中;
针对所述表格文件中的各个表格字段对应的表格进行解析,并将解析得到的各个内容转换为实体类。
可选的,所述元素解析单元,具体用于:
针对所述各个表格字段,分别执行如下操作:
针对每一表格字段对应的表格,解析该表格所包含的列字段,获取解析得到的各个列字段对应的列标识;
基于所述各个列字段对应的列标识,从所述字典文件中获取相应的字段属性值。
可选的,所述元素存放单元,具体用于:
创建数据库实体类、表格实体类以及列实体类;
将所述目标数据库的类型信息存放至所述数据库实体类中;
将所述表格文件包括的信息存放至所述表格实体类中;
将所述字典文件包括的信息存放至所述列实体类中。
可选的,
所述数据库实体类的属性包括表格列表信息;
所述表格实体类的属性包括:表格名称信息、普通列列表信息、主键列列表信息、唯一列列表信息和索引列列表信息;
所述列实体类的属性包括:所属表格名称信息、字段名称信息、字段类型信息、指示是否为主键的第一指示信息、指示是否能够为空的第二指示信息、字段描述信息和字段长度信息。
可选的,所述项目对象模型文件引入多个映射文件生成插件,每个映射文件生成插件对应一种数据库类型的映射文件的生成;
则所述映射文件生成单元,具体用于:
基于所述目标数据库的类型信息,从所述多个映射文件生成插件中确定出目标映射文件生成插件;
调用所述目标映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
可选的,所述映射文件生成单元,具体用于:
调用所述目标映射文件生成插件,基于为所述目标映射文件生成插件配置的生成规则,以及所述实体类集合中的每一个数据库表的内容,生成相应的结构化查询语句;
基于每个数据库表的内容以及生成的各个结构化查询语句,为每个数据库表生成相应的映射文件。
一方面,提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任一种方法的步骤。
一方面,提供一种计算机存储介质,其上存储有计算机程序指令,该计算机程序指令被处理器执行时实现上述任一种方法的步骤。
一方面,提供一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述任一种方法的步骤。
本申请实施例中,通过在项目对象模型文件中引入映射文件生成插件,当目标项目对象模型文件的项目编译过程中,触发映射文件生成插件对目标数据库对应的实体关系图文件进行解析,获得实体关系图文件包括的至少一个实体元素集合,并将至少一个元素集合存放至实体类集合中,从而为实体类集合中的每一个数据库表生成相应的映射文件。其中,通过对实体关系图文件进行解析,无需连接数据库并手动添加大量的配置参数,且在项目编译过程中即可生成相应的映射文件,从而解决了每次都手动执行带来的过程繁琐的问题,提升了数据库映射文件的生成效率。
附图说明
为了更清楚地说明本申请实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例提供的配置Maven插件的流程示意图;
图2为本申请实施例提供的生成目标数据库的ERM文件的流程示意图;
图3为本申请实施例提供的数据库映射文件生成方法的流程示意图;
图4为本申请实施例提供的ERM文件的一种结构示意图;
图5为本申请实施例提供的对ERM文件进行解析的流程示意图;
图6为本申请实施例提供的mapper文件的生成流程图;
图7为本申请实施例提供的数据库映射文件生成装置的一种结构示意图;
图8为本申请实施例提供的计算机设备的一种结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚明白,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
为便于理解本申请实施例提供的技术方案,这里先对本申请实施例使用的一些关键名词进行解释:
mapper文件:mapper文件用于存储数据库操作相关的内容,例如操作数据库表的结构化查询语句(structured query language,SQL)保存在mapper文件中,如mapper文件分别可以提供select、insert、update以及delete等可扩展标记语言(extensible markuplanguage,xml)元素,分别对应数据库的查询、插入、修改以及删除操作,每一个xml元素通过身份标识(Identity,ID)属性与数据访问对象(data access object,DAO)接口类中的方法相互关联。
Maven项目:Maven是一个开源的组件,目前大多数的Java项目都会使用到Maven,Maven可以辅助管理Java归档文件(Java archive,JAR)包以及构建项目等。其中,maven插件可以在编译时根据制定的规则,生成Java代码,本申请实施例即是使用了maven插件的这个功能。
项目对象模型(project object model,POM)文件:POM文件是一个Maven项目的可配置文件,任何Maven项目都包含一个名为pom.xml的可配置文件,pom.xml中基本上包含与已构建或将要构建的项目的构建生命周期的详细信息,包含有关配置详细信息、项目中包括的依赖项和插件的等所有必要信息。
实体关系图(entity-relationship model,ERM)文件:ERM文件能够表征数据库的数据结构信息,以及数据库中的实体与属性之间的关联关系,通过对ERM文件的解析,则可以解析得到数据库的相关信息。
下面对本申请实施例的设计思想进行简要介绍。
Java语言是一种面向对象的编程语言。我们在使用Java语言进行应用系统的研发时,离不开对数据库的操作,而对于数据库的操作则离不开mapper文件,而目前根据数据库表字段创建简单的Java对象(Plain Ordinary Java Object,POJO)类和mapper文件,以及配置他们之间的依赖关系的过程都是很繁杂的,效率极低。
虽然,目前存在一些工具辅助进行创建POJO类、mapper文件以及配置依赖关系,如mybatis generator工具、MyBatis-Plus代码生成器等工具,但是在实践过程中发现,这些工具都需要连接数据库才能够生成mapper文件,对数据库服务器形成了强依赖。而且,诸如利用mybatis generator工具时,需要手动在generatorConfig.xml(mybatis generator工具的配置文件)中添加大量的配置数据,在每次生成新的mapper文件时都需要手动进行执行。此外,由于这些工具都具有普遍性,其生成的mapper文件过于简单,代码不规范,通常无法满足实际的业务需求,使得往往需要开发人员重新手动编写mapper文件,效率极低。
此外,目前的数据库设计需要额外的插件才能完成,对于多人协调办公开发的项目,使用起来很不方便,常容易出现生产环境和测试环境SQL不统一的错误。
考虑到上述问题,对于数据库设计方面,可以采用能够直接嵌入开发平台的插件进行数据库模型设计,例如可以直接在eclipse中嵌入ERMaster插件,进而可以在eclipse里新建ERM文件进行数据库表设计,使用简单方便。并且,考虑到ERM文件其本质上是个XML文件,那么则可以对该XML文件进行解析,从而提取得到数据库的表结构信息,以此编写生产Mapper文件的代码,进而生成自定义的mapper文件。此外,还可以使用maven插件可以在每次项目编译时动态生成mapper文件,从而解决目前每次手动执行生成mapper带来的低效率问题。
鉴于此,本申请实施例提供一种数据库映射文件生成方法,在该方法中,通过在项目对象模型文件中引入映射文件生成插件,当目标项目对象模型文件的项目编译过程中,触发映射文件生成插件执行,对目标数据库对应的实体关系图文件进行解析,获得实体关系图文件包括的至少一个实体元素集合,并将至少一个元素集合存放至实体类集合中,从而为实体类集合中的每一个数据库表生成相应的映射文件。其中,通过对实体关系图文件进行解析,无需连接数据库并手动添加大量的配置参数,且在项目编译过程中即可生成相应的映射文件,从而解决了每次都手动执行带来的过程繁琐的问题,提升了数据库映射文件的生成效率。
此外,通过在引入数据库设计模型插件进行数据库模型设计,以获得数据库的ERM文件,则无需连接数据库,设计过程与数据库完全解耦,从而无需手动生成mapper文件。
本申请实施例中,引入的映射文件生成插件中mapper文件的生成规则可以是自定义的,可以满足大部分场景的业务需求,从而不再需要手动编写mapper文件,简化了开发流程,提高了mapper文件的生成效率。此外,为了通用性,还可以对mapper文件的底层代码进行抽象,形成专用JAR包,以供后续其他项目使用。
本申请实施例中,在生成mapper文件的过程中,需要采用预先编写得到的mapper文件生成插件,因此,在介绍数据库映射文件生成过程之前,先对mapper文件生成插件进行介绍。
本申请实施例中,在执行数据库映射文件生成过程之前,首先需要编写自定义的maven插件,并对该maven插件进行相应的配置,即在maven项目中引入该自定义的maven插件。
参见图1所示,为配置Maven插件的流程示意图。
步骤101:响应于插件自定义操作,创建mapper文件生成插件,并将mapper文件生成插件安装到Maven仓库,其中,mapper文件生成插件继承指定抽象类。
具体的,POM文件的build里面配有各种插件(plugin),这些plugin就是Maven的插件,通常被称作Mojo,这些插件的作用就是在构建项目的过程中,执行一些动作行为。例如使用maven-jar-plugin的插件,就是用于打包jar。从而可以通过引入自定义插件的方式,在Maven项目编译时自动触发执行mapper文件的生成。
在实际应用时,在新开发一个自定义Maven插件时,需要创建一个Maven项目,并且还需要在该Maven项目的POM文件中引入相关的Maven插件的jar包,例如maven-plugin-api以及maven-plugin-project等,通过这些相关Maven插件,才能够编写相应的自定义插件。进而,创建一个Java执行类,并在其中编写所要执行的操作,例如继承Maven中的指定抽象类,如AbstractMojo类,并重写execute方法里面所要实行的逻辑,编写完成之后,则可以将得到的自定义插件安装(install)到Maven仓库,从而其他项目则可以引用这个定义插件来进行一些自定义操作了,在本申请实施例中则具体是进行mapper文件的自动生成。
步骤102:创建目标Maven项目,并在目标Maven项目对应的POM文件中引入mapper文件生成插件。
其中,创建目标Maven项目的动作可以是在新建自定义插件之后进行的,也可以是在新建自定义插件之前进行的,对此并不进行限制。
具体的,在创建目标Maven项目后,则可以在该项目引用上述的mapper文件生成插件,即在build里面写上mapper文件生成插件的信息。
步骤103:在POM文件中配置mapper文件生成插件的资源属性,资源属性至少包括:ERM文件的读取地址以及mapper文件的输出地址。
具体的,编写自定义的maven插件执行类MavenMojo,继承org.apache.maven.plugin.AbstractMojo类,并在该MavenMojo类上添加注解
@org.apache.maven.plugins.annotations.Mojo,使得在Maven项目构建时能够解析到该MavenMojo类,指定注解的name=“mybatis-db”,默认defaultPhase=“generate-sources”,以及,定义该MavenMojo类的属性。该属性包括资源(sources)属性,参见下表1所示:
属性字段 | 描述信息 |
private String outputDir | 指定mapper文件输出的字段 |
private File sources | 指定被解析的ERM文件地址 |
表1
当然,还可以包括其他可能的属性信息,本申请实施例对此不做限制。
本申请实施例中,为了顺利的生成mapper文件,还需要预先针对目标数据库生成ERM文件。参见图2所示,为生成目标数据库的ERM文件的流程示意图。
步骤201:响应于插件配置操作,在开发平台软件中引入数据库设计模型插件。
本申请实施例中,开发平台软件和数据库设计模型插件可以是任意可能的开发平台软件和数据库设计模型插件。例如,开发平台软件可以是eclipse,eclipse是一种框架和一组服务,用于通过插件组件构建开发环境,数据库设计模型插件例如可以是PowerDesigner插件、ERMaster插件等。
其中,插件配置操作是指在开发平台软件中配置数据库设计模型插件的相关操作,其可以包含一个或者多个子操作步骤,以实现在开发平台软件中配置数据库设计模型插件的目的。
步骤202:响应于实体关系创建操作,调用数据库设计模型插件,创建实体关系结构模型,实体关系结构模型用于表征目标数据库中实体和属性之间的依赖关系。
具体的,以ERMaster插件为例,可以通过进行插件配置操作,在eclipse中嵌入ERMaster插件,进而可以在eclipse里新建ERM模型,并进行数据库表设计,使用简单方便。在ERM模型中,开发人员可以配置数据库实体以及属性之间的依赖关系。
步骤203:响应于针对目标数据库的数据库导出操作,基于实体关系结构模型,将目标数据库的表结构信息导出,获得实体关系图文件。
本申请实施例中,当完成目标数据库表的设计之后,则可以进行数据库导出操作,将上述实体关系结构模型中设计的目标数据库的表结构信息导出,获得实体关系图文件。
在maven项目中配置好了自定义的maven插件之后,则可以基于该插件执行数据库映射文件生成过程。参见图3所示,为本申请实施例提供的数据库映射文件生成方法的流程示意图。
步骤301:在目标Maven项目编译过程中,触发目标Maven项目对应的POM文件中引入的mapper文件生成插件,对目标数据库对应的ERM文件进行解析,获得实体关系图文件包括的至少一个实体元素集合。
本申请实施例中,在使用Maven构建项目时,可以引入第三方功能插件,可以很方便的在Maven项目编译时触发这些功能插件的执行,从而实现自动生成mapper文件的目的。
具体的,上述配置好的mapper文件生成插件,通过继承AbstractMojo类以及添加相应注解等操作,使得其在Maven项目编译过程中得以自动触发执行,从而可以基于mapper文件生成插件中编写的执行逻辑自动生成mapper文件,下面,将对mapper文件生成插件执行时的处理过程进行介绍。
首先,mapper文件生成插件通过获取sources属性的值,以从相应的ERM文件地址获取到需要被解析的ERM文件,并对ERM文件进行解析。
在一种实施方式中,ERM文件的解析可以采用自定义的插件来进行,即在上述mapper文件生成插件中加入ERM文件的解析逻辑。
在另一种实施方式中,ERM文件的解析还可以调用其他第三方插件来进行,那么可以预先在POM文件引入第三方插件的JAR包。
参见图4所示,为ERM文件的一种结构示意图;其中,ERM文件包括多种字段类型,参见图4所示,其至少包括如下字段类型:
(1)数据库配置(settings)字段
settings字段中主要包含目标数据库相关的配置信息,如图4中settings字段包含databas类,其可以用于描述数据库类型,如mysql、Oracle以及db2等类型。
(2)列字段,如图4中所示的diagram/dictionary/word,这里包含了所有列的信息。
(3)表格(table)字段,如图4中所示的diagram/content/table,这里包含了所有表的信息。
当然,ERM文件中还可以包括其他可能的信息,本申请实施例对此并不进行限制。
对应于上述介绍的ERM文件,参见图5所示,为对ERM文件进行解析的流程示意图,其中,结合图4的ERM文件结构为例,解析过程可以包括如下步骤:
步骤3011:解析实体关系图文件中的数据库配置字段,获取目标数据库的类型信息。
以图4的结构为例,则可以解析diagram/settings/database的值,以获取数据库的类型。
在实际应用时,考虑到不同类型的数据库,其mapper文件的SQL语句有所不同,因此需要预先知晓目标数据库的类型,而database里存有数据库类型的字段,所以在解析database类后,就可获知目标数据库的类型,从而后续可以选定相应的mapper文件生成插件生成相应的mapper文件,以提升mapper文件的准确性。
步骤3012:解析实体关系图文件中各个列字段,并将解析得到的各个列字段各自对应的列标识和字段属性值,按照键值对(key-value)的方式存储至字典文件(map words)中。
具体的,以图4的结构为例,可以采用遍历解析的方式,遍历diagram/dictionary/word后的元素(element)集合,获取每个element对象里的“id”作为key,element对象值作为value,放入map words中,例如diagram/dictionary/word后的“id”作为key,其余的物理名、逻辑名、字段类型、字段长度和字段精度等作为value,放入map words中。
步骤3013:解析实体关系图文件中各个表格字段,并将解析得到的各个表格字段各自对应的表格标识和对象属性值,按照键值对的方式存储至表格文件(map table)中。
同样的,也可以遍历解析diagram/content/word后的element集合,获取每个element对象里的“id”作为key,element对象值作为value,放入map tables中,例如,图4中“id”作为key,其余的物理名、逻辑名、cloumns、索引集以及唯一性约束等作为value,放入map tables中。
步骤3014:针对表格文件中的各个表格字段对应的表格进行解析,并将解析得到的各个内容转换为实体类(java bean)。
具体的,可以采用循环遍历解析的方式,循环遍历map tables,解析每张表格的详细信息,并转换为java bean。
以一个表格字段对应的表格为例,解析该表格中包含的每个列字段,获取解析得到的各个列字段对应的列标识,基于各个列字段对应的列标识,从字典文件中获取相应的字段属性值。
如图4所示,获取diagram/content/table/columns/normal_cloumn/word_id的值,并将该值作为key,从map words中获取相应的value,以获取字段的类型、长度等信息。
下面,请继续参见图3所示。
步骤302:创建实体类集合,并将至少一个元素集合存放至实体类集合中。
具体的,实体类集合可以包括如下类:
(1)数据库(Database)实体类
Database实体类用于存放数据库信息,其属性包括表格列表信息,即拥有List<Table>tables属性。
(2)表格(table)实体类
table实体类用于存放表信息,table实体类的属性包括:表格名称(tableName)信息、普通列列表(List<Column>normalColumns)信息、主键列列表(List<Column>primaryColumns)信息、唯一列列表(List<List<Column>>uniqueColumns)信息和索引列列表(List<List<Column>>indexs)信息。
(3)列(Column)实体类
column实体类用于存放列信息,Column实体类的属性包括:所属表格名称(tableName)信息、字段名称(columnName)信息、字段类型(columnType)信息、指示是否为主键的第一指示信息(identity)、指示是否能够为空的第二指示信息(mandatory)、字段描述(columnDescription)信息、字段长度(columnLength)信息以及是否为lob(如clob、glob)类型(lobFlag)属性。
则在存放ERM文件的类时,将目标数据库的类型信息存放至Database实体类中,这样,针对解析的erm文件赋值给Database实体类,则后续可以直接从Database类里获取表信息,更加方便,并map tables包括的信息存放至table实体类中,将map words包括的信息存放至Column实体类中。
步骤303:调用项目对象模型文件引入的mapper文件生成插件,遍历实体类集合中的每一个数据库表,为每个数据库表生成相应的mapper文件。
本申请实施例中,由于不同类型的数据库,mapper文件里的SQL语句可能并不相同,因而需要针对不同类型的数据路,设计不同的mapper文件生成插件,以实现不同类型数据生成的mapper不同的功能,因此,可以在POM文件中引入多个mapper文件生成插件,每个mapper文件生成插件对应一种数据库类型的mapper文件的生成。此外,Database实体类里存有数据库类型的字段,因此在解析Database实体类后,则可以基于获得的目标数据库的类型信息,从多个mapper文件生成插件中确定出目标mapper文件生成插件,以通过目标mapper文件生成插件生成目标数据库的mapper文件。进而,调用目标mapper文件生成插件,遍历实体类集合中的每一个数据库表和列,为每个数据库表生成相应的mapper文件。
具体的,调用目标mapper文件生成插件,遍历每个Database对象中的数据库表,以及遍历表中的列信息,以为每个表对应的生成相应的mapper文件,此外,还可以生成相应的POJO类文件,输出到上述资源属性指定的outputDir目录。
具体的,每个mapper文件生成插件中,都预先配置好了mapper文件的生成规则,当然,这个生成规则可以根据实际需求进行定制化的配置,从而生成更加满足业务要求的SQL语句。进而,在上述确定了目标mapper文件生成插件后,可以基于为目标mapper文件生成插件配置的生成规则,以及实体类集合中的每一个数据库表的内容,生成相应的SQL语句,从而得到相应的mapper文件。
参见图6所示,为本申请实施例提供的mapper文件的生成流程图。
S1:在eclipse中引入ERMaster插件。
通过在eclipse中嵌入ERMaster插件,进而可以在eclipse里新建ERM模型,并进行数据库表设计,使用简单方便。在ERM模型中,开发人员可以配置数据库实体以及属性之间的依赖关系。
S2:创建ERM文件。
S3:创建和设计数据库表。
S4:在POM文件中引入自定义的maven插件,并配置好相应的参数。
在实际应用时,编写自定义的maven插件执行类MavenMojo之后,继承org.apache.maven.plugin.AbstractMojo类,并在该MavenMojo类上添加注解
@org.apache.maven.plugins.annotations.Mojo,使得在Maven项目构建时能够解析到该MavenMojo类,指定注解的name=“mybatis-db”(自定义名称),默认defaultPhase=“generate-sources”,以及,定义该MavenMojo类的属性。
S5:编译maven项目,触发生成Mapper文件。
综上所述,本申请实施例中,通过使用ERMaster插件,完成数据库的设计,设计过程完全和数据库解耦,也不必手动去生成mapper文件;把生成的erm文件和代码一起放在svn或git上,便于数据库表的管理;同时,mapper文件的生成规则是可以配置的,可以满足90%以上的业务需求,无需要自定义mapper文件,极大地简化了开发流程,提高开发效率。
此外,通过Maven插件,在代码编译的过程中,解析指定的ERM文件,从而动态生成mapper文件,只需要在POM文件指定要解析ERM文件的相对路径,生成mapper文件的路径即可,解决了传统生成mapper文件需要连接数据库并且要配置繁琐的generatorConfig.xml文件,同时,这种通过维护ERM文件来维护数据库表的方式,方便简洁且无需引入额外的插件。
请参见图7,基于同一发明构思,本申请实施例还提供了一种数据库映射文件生成装置70,该装置包括:
元素解析单元701,用于在目标Maven项目编译过程中,触发目标Maven项目对应的项目对象模型文件中引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得实体关系图文件包括的至少一个实体元素集合;
元素存放单元702,用于创建实体类集合,并将至少一个元素集合存放至实体类集合中;
映射文件生成单元703,用于调用项目对象模型文件引入的映射文件生成插件,遍历实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
可选的,该装置还包括实体关系图创建单元704,用于:
响应于插件配置操作,在开发平台软件中引入数据库设计模型插件;
响应于实体关系创建操作,调用数据库设计模型插件,创建实体关系结构模型,实体关系结构模型用于表征数据库实体之间的依赖关系;
响应于针对目标数据库的数据库导出操作,基于实体关系结构模型,将目标数据库的表结构信息导出,获得实体关系图文件。
可选的,该装置还包括插件配置单元705,用于:
响应于插件自定义操作,创建映射文件生成插件,并将映射文件生成插件安装到Maven仓库,其中,映射文件生成插件继承指定抽象类;
创建目标Maven项目,并在项目对象模型文件中引入映射文件生成插件;
在项目对象模型文件中配置映射文件生成插件的资源属性,资源属性至少包括:实体关系图文件的读取地址以及生成的映射文件的输出地址。
可选的,元素解析单元701,具体用于:
解析实体关系图文件中的数据库配置字段,获取目标数据库的类型信息;
解析实体关系图文件中各个列字段,并将解析得到的各个列字段各自对应的列标识和字段属性值,按照键值对的方式存储至字典文件中;
解析实体关系图文件中各个表格字段,并将解析得到的各个表格字段各自对应的表格标识和对象属性值,按照键值对的方式存储至表格文件中;
针对表格文件中的各个表格字段对应的表格进行解析,并将解析得到的各个内容转换为实体类。
可选的,元素解析单元701,具体用于:
针对各个表格字段,分别执行如下操作:
针对每一表格字段对应的表格,解析该表格所包含的列字段,获取解析得到的各个列字段对应的列标识;
基于各个列字段对应的列标识,从字典文件中获取相应的字段属性值。
可选的,元素存放单元702,具体用于:
创建数据库实体类、表格实体类以及列实体类;
将目标数据库的类型信息存放至数据库实体类中;
将表格文件包括的信息存放至表格实体类中;
将字典文件包括的信息存放至列实体类中。
可选的,
数据库实体类的属性包括表格列表信息;
表格实体类的属性包括:表格名称信息、普通列列表信息、主键列列表信息、唯一列列表信息和索引列列表信息;
列实体类的属性包括:所属表格名称信息、字段名称信息、字段类型信息、指示是否为主键的第一指示信息、指示是否能够为空的第二指示信息、字段描述信息和字段长度信息。
可选的,项目对象模型文件引入多个映射文件生成插件,每个映射文件生成插件对应一种数据库类型的映射文件的生成;
则映射文件生成单元703,具体用于:
基于目标数据库的类型信息,从多个映射文件生成插件中确定出目标映射文件生成插件;
调用目标映射文件生成插件,遍历实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
可选的,映射文件生成单元703,具体用于:
调用目标映射文件生成插件,基于为目标映射文件生成插件配置的生成规则,以及实体类集合中的每一个数据库表的内容,生成相应的结构化查询语句;
基于每个数据库表的内容以及生成的各个结构化查询语句,为每个数据库表生成相应的映射文件。
通过上述装置,可以通过使用ERMaster插件,完成数据库的设计,设计过程完全和数据库解耦,也不必手动去生成mapper文件;把生成的erm文件和代码一起放在svn或git上,便于数据库表的管理;同时,mapper文件的生成规则是可以配置的,可以满足90%以上的业务需求,无需要自定义mapper文件,极大地简化了开发流程,提高开发效率。
此外,通过Maven插件,在代码编译的过程中,解析指定的ERM文件,从而动态生成mapper文件,只需要在POM文件指定要解析ERM文件的相对路径,生成mapper文件的路径即可,解决了传统生成mapper文件需要连接数据库并且要配置繁琐的generatorConfig.xml文件,同时,这种通过维护ERM文件来维护数据库表的方式,方便简洁且无需引入额外的插件。
该装置可以用于执行本申请各实施例中所示的方法,因此,对于该装置的各功能模块所能够实现的功能等可参考前述实施例的描述,不多赘述。
请参见图8,基于同一技术构思,本申请实施例还提供了一种计算机设备80,该计算机设备80可以为图1所示的终端设备或服务器,该计算机设备80可以包括存储器801和处理器802。
所述存储器801,用于存储处理器802执行的计算机程序。存储器801可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据计算机设备的使用所创建的数据等。处理器802,可以是一个中央处理单元(central processing unit,CPU),或者为数字处理单元等等。本申请实施例中不限定上述存储器801和处理器802之间的具体连接介质。本申请实施例在图8中以存储器801和处理器802之间通过总线803连接,总线803在图8中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线803可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器801可以是易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储器801也可以是非易失性存储器(non-volatilememory),例如只读存储器,快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD)、或者存储器801是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器801可以是上述存储器的组合。
处理器802,用于调用所述存储器801中存储的计算机程序时执行本申请各实施例中设备所执行的方法。
在一些可能的实施方式中,本申请提供的方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在计算机设备上运行时,所述程序代码用于使所述计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的方法中的步骤,例如,所述计算机设备可以执行本申请各实施例中设备所执行的方法。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (14)
1.一种数据库映射文件生成方法,其特征在于,所述方法包括:
在目标Maven项目编译过程中,触发所述目标Maven项目对应的项目对象模型文件中引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得所述实体关系图文件包括的至少一个实体元素集合;
创建实体类集合,并将所述至少一个元素集合存放至所述实体类集合中;
调用所述映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
2.如权利要求1所述的方法,其特征在于,在项目对象模型文件的项目编译过程中,触发所述项目对象模型文件引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得所述实体关系图文件包括的至少一个实体元素集合之前,所述方法还包括:
响应于插件配置操作,在开发平台软件中引入数据库设计模型插件;
响应于实体关系创建操作,调用所述数据库设计模型插件,创建实体关系结构模型,所述实体关系结构模型用于表征目标数据库中实体和属性之间的依赖关系;
响应于针对所述目标数据库的数据库导出操作,基于所述实体关系结构模型,将所述目标数据库的表结构信息导出,获得所述实体关系图文件。
3.如权利要求1或者2所述的方法,其特征在于,在目标Maven项目编译过程中,触发所述目标Maven项目对应的项目对象模型文件中引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得所述实体关系图文件包括的至少一个实体元素集合之前,所述方法还包括:
响应于插件自定义操作,创建所述映射文件生成插件,并将所述映射文件生成插件安装到Maven仓库,其中,所述映射文件生成插件继承指定抽象类;
创建所述目标Maven项目,并在所述项目对象模型文件中引入映射文件生成插件;
在所述项目对象模型文件中配置所述映射文件生成插件的资源属性,资源属性至少包括:所述实体关系图文件的读取地址以及生成的映射文件的输出地址。
4.如权利要求1所述的方法,其特征在于,在目标Maven项目编译过程中,触发所述目标Maven项目对应的项目对象模型文件中引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得所述实体关系图文件包括的至少一个实体元素集合,包括:
解析所述实体关系图文件中的数据库配置字段,获取所述目标数据库的类型信息;
解析所述实体关系图文件中各个列字段,并将解析得到的所述各个列字段各自对应的列标识和字段属性值,按照键值对的方式存储至字典文件中;
解析所述实体关系图文件中各个表格字段,并将解析得到的所述各个表格字段各自对应的表格标识和对象属性值,按照键值对的方式存储至表格文件中;
针对所述表格文件中的各个表格字段对应的表格进行解析,并将解析得到的各个内容转换为实体类。
5.如权利要求4所述的方法,其特征在于,针对所述表格文件中的各个表格字段对应的表格进行解析,包括:
针对所述各个表格字段,分别执行如下操作:
针对每一表格字段对应的表格,解析该表格所包含的列字段,获取解析得到的各个列字段对应的列标识;
基于所述各个列字段对应的列标识,从所述字典文件中获取相应的字段属性值。
6.如权利要求4所述的方法,其特征在于,所述创建实体类集合,并将所述至少一个元素集合存放至所述实体类集合中,包括:
创建数据库实体类、表格实体类以及列实体类;
将所述目标数据库的类型信息存放至所述数据库实体类中;
将所述表格文件包括的信息存放至所述表格实体类中;
将所述字典文件包括的信息存放至所述列实体类中。
7.如权利要求6所述的方法,其特征在于,
所述数据库实体类的属性包括表格列表信息;
所述表格实体类的属性包括:表格名称信息、普通列列表信息、主键列列表信息、唯一列列表信息和索引列列表信息;
所述列实体类的属性包括:所属表格名称信息、字段名称信息、字段类型信息、指示是否为主键的第一指示信息、指示是否能够为空的第二指示信息、字段描述信息和字段长度信息。
8.如权利要求4-7任一所述的方法,其特征在于,所述项目对象模型文件引入多个映射文件生成插件,每个映射文件生成插件对应一种数据库类型的映射文件的生成;
则调用所述项目对象模型文件引入的映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件,包括:
基于所述目标数据库的类型信息,从所述多个映射文件生成插件中确定出目标映射文件生成插件;
调用所述目标映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
9.如权利要求8所述的方法,其特征在于,调用所述目标映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件,包括:
调用所述目标映射文件生成插件,基于为所述目标映射文件生成插件配置的生成规则,以及所述实体类集合中的每一个数据库表的内容,生成相应的结构化查询语句;
基于每个数据库表的内容以及生成的各个结构化查询语句,为每个数据库表生成相应的映射文件。
10.一种数据库映射文件生成装置,其特征在于,所述装置包括:
元素解析单元,用于在目标Maven项目编译过程中,触发所述目标Maven项目对应的项目对象模型文件中引入的映射文件生成插件,对目标数据库对应的实体关系图文件进行解析,获得所述实体关系图文件包括的至少一个实体元素集合;
元素存放单元,用于创建实体类集合,并将所述至少一个元素集合存放至所述实体类集合中;
映射文件生成单元,用于调用所述项目对象模型文件引入的映射文件生成插件,遍历所述实体类集合中的每一个数据库表,为每个数据库表生成相应的映射文件。
11.如权利要求10所述的装置,其特征在于,所述装置还包括实体关系图创建单元,用于:
响应于插件配置操作,在开发平台软件中引入数据库设计模型插件;
响应于实体关系创建操作,调用所述数据库设计模型插件,创建实体关系结构模型,所述实体关系结构模型用于表征数据库实体之间的依赖关系;
响应于针对所述目标数据库的数据库导出操作,基于所述实体关系结构模型,将所述目标数据库的表结构信息导出,获得所述实体关系图文件。
12.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,
所述处理器执行所述计算机程序时实现权利要求1至9任一项所述方法的步骤。
13.一种计算机存储介质,其上存储有计算机程序指令,其特征在于,
该计算机程序指令被处理器执行时实现权利要求1至9任一项所述方法的步骤。
14.一种计算机程序产品,包括计算机程序指令,其特征在于,
该计算机程序指令被处理器执行时实现权利要求1至9任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111455826.3A CN114138748A (zh) | 2021-12-02 | 2021-12-02 | 数据库映射文件生成方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111455826.3A CN114138748A (zh) | 2021-12-02 | 2021-12-02 | 数据库映射文件生成方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114138748A true CN114138748A (zh) | 2022-03-04 |
Family
ID=80386854
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111455826.3A Pending CN114138748A (zh) | 2021-12-02 | 2021-12-02 | 数据库映射文件生成方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114138748A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115617819A (zh) * | 2022-12-19 | 2023-01-17 | 思创数码科技股份有限公司 | 数据存储方法、系统、计算机设备及存储介质 |
CN117454450A (zh) * | 2023-12-25 | 2024-01-26 | 广州中望龙腾软件股份有限公司 | 装配数据管理方法、装置、存储介质及计算机设备 |
US11973660B1 (en) * | 2022-12-09 | 2024-04-30 | Arista Networks, Inc. | Method and system for data model mapping for network management |
-
2021
- 2021-12-02 CN CN202111455826.3A patent/CN114138748A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11973660B1 (en) * | 2022-12-09 | 2024-04-30 | Arista Networks, Inc. | Method and system for data model mapping for network management |
CN115617819A (zh) * | 2022-12-19 | 2023-01-17 | 思创数码科技股份有限公司 | 数据存储方法、系统、计算机设备及存储介质 |
CN117454450A (zh) * | 2023-12-25 | 2024-01-26 | 广州中望龙腾软件股份有限公司 | 装配数据管理方法、装置、存储介质及计算机设备 |
CN117454450B (zh) * | 2023-12-25 | 2024-05-31 | 广州中望龙腾软件股份有限公司 | 装配数据管理方法、装置、存储介质及计算机设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110162296B (zh) | 应用程序编程接口文档的生成方法、装置及终端设备 | |
US11726969B2 (en) | Matching metastructure for data modeling | |
US9465590B2 (en) | Code generation framework for application program interface for model | |
US8782081B2 (en) | Query template definition and transformation | |
CN114138748A (zh) | 数据库映射文件生成方法、装置、设备及存储介质 | |
US20210357577A1 (en) | Logical, recursive definition of data transformations | |
US20240045850A1 (en) | Systems and methods for database orientation transformation | |
US9262850B2 (en) | Descriptive framework for data visualization | |
US8381176B1 (en) | Software build orchestration framework | |
US20090276784A1 (en) | Resource management method | |
US9104724B2 (en) | Dynamic bridging of application and data servers | |
CN112114810A (zh) | 编译处理方法及装置 | |
WO2021022703A1 (zh) | 软件项目重构方法、装置、计算机装置及存储介质 | |
US10127136B2 (en) | Identifying and visualizing suboptimal memory layouts in software programs | |
US11055275B2 (en) | Database revalidation using parallel distance-based groups | |
CN112698819A (zh) | 面向树化对象编程程序设计方法、装置及存储介质 | |
CN114356964A (zh) | 数据血缘构建方法、装置、存储介质及电子设备 | |
CN113761040A (zh) | 数据库与应用程序双向映射方法、设备、介质及程序产品 | |
US11977473B2 (en) | Providing a pseudo language for manipulating complex variables of an orchestration flow | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
US11693652B2 (en) | Automated authoring of software solutions from a data model | |
CN114816364A (zh) | 基于Swagger动态生成范本文件的方法、装置及应用 | |
US20170351744A1 (en) | Simulation of a synchronization of records | |
CN117372182B (zh) | 一种基于快速开发持久层代码辅助方法的保险管理系统 | |
CN116755684B (zh) | OAS Schema的生成方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |