CN113296748B - 数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质 - Google Patents
数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质 Download PDFInfo
- Publication number
- CN113296748B CN113296748B CN202010106724.XA CN202010106724A CN113296748B CN 113296748 B CN113296748 B CN 113296748B CN 202010106724 A CN202010106724 A CN 202010106724A CN 113296748 B CN113296748 B CN 113296748B
- Authority
- CN
- China
- Prior art keywords
- compiling
- file
- mapped
- intermediate file
- data
- 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
Links
Images
Classifications
-
- 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
-
- 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/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- 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/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质,映射方法,包括如下步骤:S100:于一编译器内编写形成包括映射操作的编译模块;S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构;S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件;S400:利用编译模块对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件;S500:利用编译模块对第二中间文件再编译,形成一执行文件;S600:运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。采用上述技术方案后,可有效减少开发成本及维护成本,提高开发效率。
Description
技术领域
本发明涉及数据库需求的软件工程领域,尤其涉及一种数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质。
背景技术
目前,在大多数的软件项目工程中,需要搭建软件工程所需依赖的数据库,数据库的搭建由工程师利用软件代码的开发和编译实现。在开发人员利用代码对数据库操作时,大多由其自行编写SQL语句进行操作,或者采用传统的ORM-(Object Relation Mapping)方式,人工方式填写字段到数据库的映射关系配置,例如,当需要搭建如下数据库表格时:
Person:
ID | Name | Position |
1 | Dave | SoftwareEngineer |
一般传统SQL语句插入方式为,开发人员编译如下代码,
DbInterface.execute(<<“INSERT INTO Person VALUES(1,\“Dave\”,\“Software Engineer\”)”>>).来进行数据库插入和更新。该方式下,极大的增加了维护成本和出错概率,而当数据库内的字段发生改变的时候,例如对其中的字条进行增加、删减、修改时,需要对之前写过的逻辑进行修改和梳理来确保正确性,由于各字条间的关联性,为保证所有字条的正确性,需要对所有字条进行梳理,工作量及其复杂。
因此,为减少数据库修改时的安全隐患和人力成本,需要一种新型的数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质。
发明内容
为了克服上述技术缺陷,本发明的目的在于提供一种数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质,可有效减少开发成本及维护成本,提高开发效率。
本发明公开了一种数据对象与数据库的映射方法,包括如下步骤:
S100:于一编译器内编写形成包括映射操作的编译模块;
S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构;
S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件;
S400:利用编译模块对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件;
S500:利用编译模块对第二中间文件再编译,形成一执行文件;
S600:运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
优选地,S100:于一编译器内编写形成包括映射操作的编译模块的步骤包括:
S110:基于C语言、汇编或erlang编译环境,于一编译器内编写将代码编译至抽象语法树结构的第一编译指令;
S120:于编译器内,再编写包括映射操作的第二编译指令,以形成包括第一编译指令及第二编译指令的编译模块。
优选地,S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构的步骤包括:
S210:获取待映射数据对象,添加编译和二次编译的标记;
S220:在一结构文件内记录标记及待映射数据对象的字段,以形成定义待映射数据对象的对象结构的结构文件。
优选地,S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件的步骤包括:
S310:基于编译器的第一编译指令,将结构文件编译为基于抽象语法树结构的中间文件,其中中间文件包括待映射数据对象的字段及字段的参数要求。
优选地,S400:利用编译模块对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件的步骤包括:
S410:判断中间文件是否包括编译和再编译的标记;
S420:当中间文件包括编译和再编译的标记时,解析第一中间文件,以获取待映射数据对象的名称、字段和/或字段名称;
S430:基于编译模块的第二编译指令,将映射操作注入第一中间文件形成第二中间文件,以实体化待映射数据对象的名称、字段和/或字段名称,其中第二中间文件包括待映射数据对象的字段的参数要求及字段的自检指令。
优选地,运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库的步骤包括:
S610:运行执行文件,调用二次编译时注入的映射操作,生成对待映射数据处理的SQL语句;
S620:执行SQL语句,将待映射数据映射至数据库;
S630:检查待映射数据的类型是否符合参数要求。
优选地,映射方法还包括:
S700:基于一数据库的更新需求,在结构文件内修改待映射数据对象,以一更新结构文件重新定义待映射数据对象的对象结构;
S800:利用编译器对结构文件编译,形成基于抽象语法树结构的更新第一中间文件;
S900:利用编译模块对更新第一中间文件二次编译,将映射操作注入更新第一中间文件形成基于抽象语法树结构的更新第二中间文件;
S1000:利用编译模块对更新第二中间文件再编译,形成一更新执行文件;
S1100:运行更新执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
本发明还公开了一种数据对象与数据库的映射系统,映射系统包括:
定义模块,获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构;
编译模块,编写有映射操作,对结构文件编译,形成基于抽象语法树结构的第一中间文件,并对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件,对第二中间文件再编译,形成一执行文件;
运行模块,运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
本发明又公开了一种服务器,包括数据库,服务器还包括:
定义模块,获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构;
编译模块,编写有映射操作,对结构文件编译,形成基于抽象语法树结构的第一中间文件,并对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件,对第二中间文件再编译,形成一执行文件;
运行模块,运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
本发明又公开了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
S100:于一编译器内编写形成包括映射操作的编译模块;
S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构;
S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件;
S400:利用编译模块对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件;
S500:利用编译模块对第二中间文件再编译,形成一执行文件;
S600:运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
采用了上述技术方案后,与现有技术相比,具有以下有益效果:
1.通过编译的手段自动注入对象映射数据的relation方式,运行程序便可自动调用操作数据库;
2.提高开发效率的同时解决了人工编译语句下导致的操作错误。
附图说明
图1为符合本发明一优选实施例中数据对象与数据库的映射方法的流程示意图;
图2为符合本发明又一优选实施例中数据对象与数据库的映射方法的流程示意图;
图3为符合本发明一优选实施例中数据对象与数据库的映射系统的结构示意图。
具体实施方式
以下结合附图与具体实施例进一步阐述本发明的优点。
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
在本公开使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本公开。在本公开和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本公开可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本公开范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
在本发明的描述中,需要理解的是,术语“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
在本发明的描述中,除非另有规定和限定,需要说明的是,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是机械连接或电连接,也可以是两个元件内部的连通,可以是直接相连,也可以通过中间媒介间接相连,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本发明的说明,其本身并没有特定的意义。因此,“模块”与“部件”可以混合地使用。
参阅图1,为符合本发明一优选实施例中数据对象与数据库的映射方法的流程示意图,在该实施例中,数据对象与数据库的映射方法包括如下步骤:
S100:于一编译器内编写形成包括映射操作的编译模块
取一编译器,如erlang编译器,并在编译器内利用代码(如汇编语言、C语言、C++、JAVA等)编写一编译模块。以erlang环境为例,erlang环境下的erlang编译器支持编译用户形成的编译模块可根据编译用户的期望和代码需求而执行相应的操作。因此,在该实施例中,编译模块根据编译用户的代码定义,包括映射操作,该映射操作,为将某一字条、字段等映射至数据库内某一位置的操作,例如,以以下数据库表格为例,
ID | Name | Position |
1 | Dave | SoftwareEngineer |
映射操作包括将某姓名字段映射至“Name”列里,或是将职位字段映射至“Position”列里,具有这些映射操作后,可将数据库内需要增加、删减、修改的字段与具体增加、删减、修改的位置所匹配,而上述工作,全都将在编译模块内完成。
S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构
根据用户对数据库的结构需求,例如数据库内所包含的数据类型(ID号、姓名、成绩、职位等),将期望数据库的数据类型定义为待映射数据对象。可以理解的是,期望数据库的数据类型可完全由用户自定义,不同数据库的待映射数据对象不同。具有该待映射数据对象后,将以结构文件定义待映射数据对象的对象结构,结构文件体的定义可由代码实现。同样以erlang环境为例,定义语言内具有数据库的名称,代表数据类型的待映射数据对象,或优选地,还包括对各待映射数据对象的简要数据要求,例如字段长度、数据范围等。
S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件
具有结构文件后,可利用代码所支持的环境下的编译器对结构文件编译,首次编译下,编译器对结构文件编译后的文件为基于抽象语法树结构的第一中间文件。抽象语法树结构(AST—Abstract Syntax Tree)作为源代码的抽象语法结构的树状表现形式,可指编程语言的源代码,树上的每个节点都表示源代码中的一种结构。
S400:利用编译模块对第一中间文件二次编译,将所述映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件
再次,继续利用编译模块对上述第一中间文件二次编译,在该再编译下,可将步骤S100中的映射操作注入第一中间文件,从而形成同样基于抽象语法树结构的第二中间文件。可以理解的是,第一次编译,编译器仅将结构文件编译为基于AST的第一中间文件,而再编译下,以第一中间文件为基础,将编译器内编写的数据字段与数据类型的映射关系所对应的映射操作编译至第一中间文件内,编译后便为第二中间文件。
S500:利用编译模块对第二中间文件再编译,形成一执行文件
再次,具有第二中间文件后,再利用编译模块对第二中间文件三次编译(再编译),将第二中间文件转换为执行文件。该执行文件为后续步骤下可运行,并执行执行文件内运行指令的相应操作。
S600:运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库
具有执行文件后,运行执行文件,调用执行文件内已编译的映射操作后,将形成将待映射数据对象对应的数据字段映射至数据库内的执行语句,执行语句根据用户的需求执行后,数据字段便自动地加入到数据库内。若数据库内不具有数据字段所对应的数据类型,则数据字段便为增加至数据库内;若数据库内已具有数据字段对应的数据类型,则数据字段便替换原字段,以修改至数据库内。
通过上述配置,代替原有开发人员人工编写每一SQL语句来编辑数据库的方式,由于执行文件内已编译有映射操作及待映射数据对象,运行后便可自动生成执行语句,经测试,可至少提升20%的逻辑开发效率,并降低90%因开发人员编写数据库的错误。
一优选实施例中,于一编译器内编写形成包括映射操作的编译模块的步骤S100包括:
S110:基于C语言、汇编或erlang编译环境,于一编译器内编写将代码编译至抽象语法树结构的第一编译指令;
为形成编译模块,在不同的开发环境下,如C语言、汇编或erlang编译环境,可调用这些编译环境下所支持的编译器,并在编译器内撰写第一编译指令,第一编译指令的作用在于,当第一编译指令被执行时,可将所指向的代码编译为抽象语法树结构。
S120:于编译器内,再编写包括映射操作的第二编译指令,以形成包括第一编译指令及第二编译指令的编译模块。
继而,该编译器内,还将编写第二编译指令,第二编译指令内包括有映射操作,其作用在于,当第二编译指令被运行时,可执行映射操作。也即,编译模块内分别包括有第一编译指令及第二编译指令,在数据库还未形成和数据字段还未添加时,编译模块内已预先具有上述编译指令。
又一优选实施例中,获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构的步骤S200包括:
S210:获取待映射数据对象,添加编译和二次编译的标记;
获取待映射数据对象后,在开发源码内,将添加编译和二次编译的标记。举例来说,开发源码内可增加compile编译,作为具有第一编译指令和第二编译指令的标签,编译模块可通过对标签的识别,确定该编译模块是否已被用户自定义编译,也就是说,标记可作为编译模块后续是否可被注入映射操作的条件,当且仅当具有编译和二次编译的标记后,可将映射操作注入AST代码,以嵌入数据对象的映射信息。
S220:在一结构文件内记录标记及待映射数据对象的字段,以形成定义待映射数据对象的对象结构的结构文件
获取一结构文件,如普通源码所定义的结构文件,记录下结构文件内的标记数量、位置等,以及待映射数据对象的字段,从而可形成定义待映射数据对象的对象结构的结构文件。如结构文件内除包括标记外,还包括数据库的名称、各字段的名称(如上文提及的ID、姓名、职位等)。
又一优选实施例中,利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件的步骤S300包括:
S310:基于编译器的第一编译指令,在第一编译指令被运行时,其可将结构文件编译为基于抽象语法树结构的中间文件,其中中间文件包括待映射数据对象的字段及字段的参数要求,字段的参数要求如姓名和职位的字符数据类型所支持的最大长度为256等。
进一步地,利用编译模块对第一中间文件二次编译,将所述映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件的步骤S400包括:
S410:判断第一中间文件是否包括编译和再编译的标记;
首先,将判断所接收的第一中间文件是否包括有编译和再编译的标记。具体地,可遍历开发源码,查看开发源码内是否具有compile标记。
S420:当第一中间文件包括编译和再编译的标记时,解析第一中间文件,以获取待映射数据对象的名称、字段和/或字段名称;
在确认第一中间文件包括有编译和再编译的标记时,将解析该第一中间文件,以获取待映射数据对象的名称(如表示数据库用处的人员表、成绩表、工资表、应用程序内的对象数据表等)、字段(如上述表内的各部分内的序号、姓名、职位的具体内容等)和/或字段名称(如上述表内的各部分内的序号、姓名、职位等)。
S430:基于编译模块的第二编译指令,将映射操作注入第一中间文件形成第二中间文件,以实体化待映射数据对象的名称、字段和/或字段名称,其中第二中间文件包括待映射数据对象的字段的参数要求及字段的自检指令
根据第二编译指令的运行,编译模块内已包括的映射操作将被注入至第一中间文件内,以形成第二中间文件,从而实体化待映射数据对象的名称、字段和/或字段名称,此处所指的实体化,为可被运行的开发语句,且开发语句被运行时,可基于映射操作直接地将字段加入到数据库内。此外,第二中间文件还包括待映射数据对象的字段的参数要求及字段的自检指令,自检指令下,可检测所加字段是否符合参数要求。例如,序号是否为整数、姓名是否符合一般的姓名习惯等。通过自检指令的设置,可初期检测所添加的字段是否准确。
再一优选实施例中,运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库的步骤S600包括:
S610:运行执行文件,调用二次编译时注入的映射操作,生成对所述待映射数据处理的SQL语句;
执行文件运行后,根据代码的编辑,将调用二次编译时注入的映射操作,并自动生成SQL语句,这部分SQL语句为对待映射数据对象处理的语句,当SQL语句再被执行后,便可将待映射数据对象添加至数据库内。在该实施例中,由于映射操作已被预先注入到开发源码内,则原由开发人员人工编写的SQL语句变更为自动生成,便可节省开发时间,降低开发时的人工撰写错误。
S620:执行SQL语句,将待映射数据映射至数据库;
S630:检查待映射数据的类型是否符合参数要求。
实施例一
以一期望数据库包括员工名称、职位、工资等数据库表格为例,开发环境为erlang语言及环境,在erlang环境下,取一erlang编译器编写源码,源码的作用在于,在erlang编译器内编写形成一编译模块,且该编译模块的源码内包括有将期望数据库内的期望字段编辑至期望数据库内的映射操作。后继续对源码编译,这部分编译内容的作用在于,获取期望的数据类型(即待映射数据对象),如名称(栏/列)、职位(栏/列)、工资(栏/列)等数据,并通过源码的编写,以结构文件的定义待映射数据对象的对象结构。再次,仍取erlang编译器,对结构文件编译,将源码编译到AST结构,形成第一中间文件,再通过代码的编写,对第一中间文件二次编译,将前序的映射操作的代码,注入至第一中间文件,从而形成AST结构的第二中间文件。再者,源码内还将编写有,利用编译模块对第二中间文件再编译以封装的代码,从而形成一执行文件。当执行文件(如程序)被运行时,其将根据代码的编写,调用二次编译时注入的映射操作,将期望字段编辑至期望数据库内,其中编译的步骤将由自动形成SQL语句完成,当需要对数据库再编辑时,只需修改源码内的映射操作的映射对象即可,无需重新编写SQL语句。
上文提及的erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。erlang问世于1987年,经过十年的发展,于1998年发布开源版本。erlang是运行于虚拟机的解释性语言,但是现在也包含有乌普萨拉大学高性能erlang计划(HiPE)开发的本地代码编译器,自R11B-4版本开始,erlang也开始支持脚本式解释器。在编程范型上,erlang属于多重范型编程语言,涵盖函数式、并发式及分布式。顺序执行的erlang是一个及早求值,单次赋值和动态类型的函数式编程语言。此外,erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合于构建分布式,实时软并行计算系统。使用erlang编写出的应用运行时通常由成千上万个轻量级进程组成,并通过消息传递相互通讯。
参阅图2,另一优选实施例中,映射方法还包括:
S700:基于一数据库的更新需求,在结构文件内修改待映射数据对象,以一更新结构文件重新定义待映射数据对象的对象结构;
若一数据库内的数据需要更新,例如对数据库内数据增加、修改、删除的更新需求,开发人员可对结构文件内修改待映射数据对象,例如,原结构文件内编译的待映射数据对象为“姓名:张三”,根据更新需求,开发人员仅需将“张三”修改为“李四”,便可将结构文件内的张三直接修改为李四便可,从而更新了结构文件,及重新定义了待映射数据对象的对象结构。该操作下,替代原有重新编写SQL语句的方式,通过更为直接和有效的方式,可提高源码开发效率。
S800:利用编译器对结构文件编译,形成基于抽象语法树结构的更新第一中间文件;
S900:利用编译模块对更新第一中间文件二次编译,将映射操作注入更新第一中间文件形成基于抽象语法树结构的更新第二中间文件;
S1000:利用编译模块对更新第二中间文件再编译,形成一更新执行文件;
S1100:运行更新执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
参阅图3,示出了一实施例中数据对象与数据库的映射系统,映射系统包括:定义模块,获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构;编译模块,编写有映射操作,对结构文件编译,形成基于抽象语法树结构的第一中间文件,并对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件,对第二中间文件再编译,形成一执行文件;运行模块,运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
映射系统可以服务器为载体实现,因此,服务器可包括数据库,还包括:定义模块,获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构;编译模块,编写有映射操作,对结构文件编译,形成基于抽象语法树结构的第一中间文件,并对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件,对第二中间文件再编译,形成一执行文件;运行模块,运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
本发明还公开了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
S100:于一编译器内编写形成包括映射操作的编译模块;
S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构;
S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件;
S400:利用编译模块对第一中间文件二次编译,将映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件;
S500:利用编译模块对第二中间文件再编译,形成一执行文件;
S600:运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
应当注意的是,本发明的实施例有较佳的实施性,且并非对本发明作任何形式的限制,任何熟悉该领域的技术人员可能利用上述揭示的技术内容变更或修饰为等同的有效实施例,但凡未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何修改或等同变化及修饰,均仍属于本发明技术方案的范围内。
Claims (9)
1.一种数据对象与数据库的映射方法,其特征在于,包括如下步骤:
S100:于一编译器内编写形成包括映射操作的编译模块,其中映射操作包括将数据字段映射至数据库内某一位置;
S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构,其中待映射数据对象包括期望数据库的数据类型;
S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件;
S400:利用编译模块对第一中间文件二次编译,将所述映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件;
S500:利用编译模块对第二中间文件再编译,形成一执行文件;
S600:运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象对应的数据字段映射至数据库,若数据库内不具有数据字段所对应的数据类型,则数据字段便增加至数据库内;若数据库内已具有数据字段对应的数据类型,则数据字段替换原字段,以修改至数据库内,其中
S400:利用编译模块对第一中间文件二次编译,将所述映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件的步骤包括:
S410:判断所述第一中间文件是否包括编译和再编译的标记;
S420:当所述第一中间文件包括编译和再编译的标记时,解析第一中间文件,以获取待映射数据对象的名称、字段和/或字段名称;
S430:基于编译模块的第二编译指令,将所述映射操作注入第一中间文件形成第二中间文件,以实体化待映射数据对象的名称、字段和/或字段名称,其中所述第二中间文件包括待映射数据对象的字段的参数要求及字段的自检指令。
2.如权利要求1所述的映射方法,其特征在于,
S100:于一编译器内编写形成包括映射操作的编译模块的步骤包括:
S110:基于C语言、汇编或erlang编译环境,于一编译器内编写将代码编译至抽象语法树结构的第一编译指令;
S120:于所述编译器内,再编写包括映射操作的第二编译指令,以形成包括第一编译指令及第二编译指令的编译模块。
3.如权利要求1所述的映射方法,其特征在于,
S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构的步骤包括:
S210:获取待映射数据对象,添加编译和二次编译的标记;
S220:在一结构文件内记录标记及待映射数据对象的字段,以形成定义待映射数据对象的对象结构的结构文件。
4.如权利要求2所述的映射方法,其特征在于,
S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件的步骤包括:
S310:基于编译器的第一编译指令,将结构文件编译为基于抽象语法树结构的中间文件,其中所述中间文件包括待映射数据对象的字段及所述字段的参数要求。
5.如权利要求1所述的映射方法,其特征在于,
S600:运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象对应的数据字段映射至数据库的步骤包括:
S610:运行执行文件,调用二次编译时注入的映射操作,生成对所述数据字段处理的SQL语句;
S620:执行SQL语句,将所述数据字段映射至数据库;
S630:检查所述数据字段的类型是否符合参数要求。
6.如权利要求1所述的映射方法,其特征在于,所述映射方法还包括:
S700:基于一数据库的更新需求,在结构文件内修改待映射数据对象,以一更新结构文件重新定义待映射数据对象的对象结构;
S800:利用编译器对结构文件编译,形成基于抽象语法树结构的更新第一中间文件;
S900:利用编译模块对更新第一中间文件二次编译,将所述映射操作注入更新第一中间文件形成基于抽象语法树结构的更新第二中间文件;
S1000:利用编译模块对更新第二中间文件再编译,形成一更新执行文件;
S1100:运行更新执行文件,调用二次编译时注入的映射操作,将待映射数据对象映射至数据库。
7.一种数据对象与数据库的映射系统,其特征在于,所述映射系统包括:
定义模块,获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构,其中待映射数据对象包括期望数据库的数据类型;
编译模块,编写有映射操作,其中映射操作包括将数据字段映射至数据库内某一位置,对结构文件编译,形成基于抽象语法树结构的第一中间文件,并对第一中间文件二次编译,将所述映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件,对第二中间文件再编译,形成一执行文件;
运行模块,运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象对应的数据字段映射至数据库,若数据库内不具有数据字段所对应的数据类型,则数据字段便增加至数据库内;若数据库内已具有数据字段对应的数据类型,则数据字段替换原字段,以修改至数据库内,其中
所述编译模块判断所述第一中间文件是否包括编译和再编译的标记;当所述第一中间文件包括编译和再编译的标记时,解析第一中间文件,以获取待映射数据对象的名称、字段和/或字段名称;基于编译模块的第二编译指令,将所述映射操作注入第一中间文件形成第二中间文件,以实体化待映射数据对象的名称、字段和/或字段名称,其中所述第二中间文件包括待映射数据对象的字段的参数要求及字段的自检指令。
8.一种服务器,包括数据库,其特征在于,所述服务器还包括:
定义模块,获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构,其中待映射数据对象包括期望数据库的数据类型;
编译模块,编写有映射操作,其中映射操作包括将数据字段映射至数据库内某一位置,对结构文件编译,形成基于抽象语法树结构的第一中间文件,并对第一中间文件二次编译,将所述映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件,对第二中间文件再编译,形成一执行文件;
运行模块,运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象对应的数据字段映射至数据库,若数据库内不具有数据字段所对应的数据类型,则数据字段便增加至数据库内;若数据库内已具有数据字段对应的数据类型,则数据字段替换原字段,以修改至数据库内,其中
所述编译模块判断所述第一中间文件是否包括编译和再编译的标记;当所述第一中间文件包括编译和再编译的标记时,解析第一中间文件,以获取待映射数据对象的名称、字段和/或字段名称;基于编译模块的第二编译指令,将所述映射操作注入第一中间文件形成第二中间文件,以实体化待映射数据对象的名称、字段和/或字段名称,其中所述第二中间文件包括待映射数据对象的字段的参数要求及字段的自检指令。
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现以下步骤:
S100:于一编译器内编写形成包括映射操作的编译模块,其中映射操作包括将数据字段映射至数据库内某一位置;
S200:获取待映射数据对象,并以结构文件定义待映射数据对象的对象结构,其中待映射数据对象包括期望数据库的数据类型;
S300:利用编译器对结构文件编译,形成基于抽象语法树结构的第一中间文件;
S400:利用编译模块对第一中间文件二次编译,将所述映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件;
S500:利用编译模块对第二中间文件再编译,形成一执行文件;
S600:运行执行文件,调用二次编译时注入的映射操作,将待映射数据对象对应的数据字段映射至数据库,若数据库内不具有数据字段所对应的数据类型,则数据字段便增加至数据库内;若数据库内已具有数据字段对应的数据类型,则数据字段替换原字段,以修改至数据库内,其中
S400:利用编译模块对第一中间文件二次编译,将所述映射操作注入第一中间文件形成基于抽象语法树结构的第二中间文件的步骤包括:
S410:判断所述第一中间文件是否包括编译和再编译的标记;
S420:当所述第一中间文件包括编译和再编译的标记时,解析第一中间文件,以获取待映射数据对象的名称、字段和/或字段名称;
S430:基于编译模块的第二编译指令,将所述映射操作注入第一中间文件形成第二中间文件,以实体化待映射数据对象的名称、字段和/或字段名称,其中所述第二中间文件包括待映射数据对象的字段的参数要求及字段的自检指令。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010106724.XA CN113296748B (zh) | 2020-02-21 | 2020-02-21 | 数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010106724.XA CN113296748B (zh) | 2020-02-21 | 2020-02-21 | 数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113296748A CN113296748A (zh) | 2021-08-24 |
CN113296748B true CN113296748B (zh) | 2022-07-26 |
Family
ID=77317455
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010106724.XA Active CN113296748B (zh) | 2020-02-21 | 2020-02-21 | 数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113296748B (zh) |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722479A (zh) * | 2011-03-30 | 2012-10-10 | 腾讯科技(深圳)有限公司 | 一种实现语言翻译的方法及装置 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001033347A2 (en) * | 1999-11-01 | 2001-05-10 | Curl Corporation | System and method supporting nonlocal values |
US7237207B2 (en) * | 2003-12-15 | 2007-06-26 | Microsoft Corporation | Mapper compiler |
US7992140B2 (en) * | 2005-07-29 | 2011-08-02 | Microsoft Corporation | Compiler supporting programs as data objects |
CN102339298A (zh) * | 2010-07-28 | 2012-02-01 | 中国移动通信集团公司 | Sql脚本元数据的更新方法、装置及系统 |
US8538954B2 (en) * | 2011-01-25 | 2013-09-17 | Hewlett-Packard Development Company, L.P. | Aggregate function partitions for distributed processing |
CN102135904A (zh) * | 2011-03-11 | 2011-07-27 | 华为技术有限公司 | 一种面向多核目标系统的映射方法及装置 |
US9116714B2 (en) * | 2013-07-10 | 2015-08-25 | Tencent Technology (Shenzhen) Company Limited | Methods and systems for file processing |
CN108874438B (zh) * | 2018-06-25 | 2021-09-21 | 南京中感微电子有限公司 | 补丁生成方法、装置、电子设备及计算机存储介质 |
CN110716715B (zh) * | 2019-10-18 | 2024-01-19 | 恒生电子股份有限公司 | 一种应用程序开发方法、装置、设备及介质 |
-
2020
- 2020-02-21 CN CN202010106724.XA patent/CN113296748B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102722479A (zh) * | 2011-03-30 | 2012-10-10 | 腾讯科技(深圳)有限公司 | 一种实现语言翻译的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113296748A (zh) | 2021-08-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5339424A (en) | System and method for compiling and executing a computer program written in more than one programming language | |
US5850554A (en) | Compiler tool set for efficiently generating and easily managing multiple program versions of different types | |
US7454745B2 (en) | Automated semantic-based updates to modified code base | |
CN111796831B (zh) | 一种多芯片兼容的编译方法和装置 | |
US5201050A (en) | Line-skip compiler for source-code development system | |
US5193191A (en) | Incremental linking in source-code development system | |
Gottschalk et al. | Removing energy code smells with reengineering services | |
CN109918294B (zh) | 一种混源软件自主可控性检测方法及系统 | |
US10331425B2 (en) | Automated source code adaption to inject features between platform versions | |
US6961931B2 (en) | Dependency specification using target patterns | |
US20080082974A1 (en) | Managing Software Component Version Identifications in a Componentised Software System | |
US8726231B2 (en) | Support for heterogeneous database artifacts in a single project | |
CN112394942B (zh) | 基于云计算的分布式软件开发编译方法及软件开发平台 | |
US6467082B1 (en) | Methods and apparatus for simulating external linkage points and control transfers in source translation systems | |
US6895581B1 (en) | Replaceable classes and virtual constructors for object-oriented programming languages | |
US20130019225A1 (en) | Incremental Inferences for Developing Data Models | |
CN112882718A (zh) | 编译处理方法、装置、设备及存储介质 | |
CN113296748B (zh) | 数据对象与数据库的映射方法、系统、服务器及计算机可读存储介质 | |
Hanus et al. | A typeful integration of SQL into Curry | |
US20120330878A1 (en) | Conventions for inferring data models | |
CN114489653A (zh) | 基于编译器的数据处理方法、装置以及可读存储介质 | |
CN111767033A (zh) | 用于机械臂程序开发的编程系统及功能扩展方法 | |
CN110096274B (zh) | 分布式内存列式数据库的生成代码复用匹配管理方法 | |
CN116627390B (zh) | 航空软件开发中icd文件的替代方法及装置 | |
CN116243971B (zh) | 一种基于静态依赖自举的内核无关的模块构建方法 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |