CN110531971B - 访问代码自动生成方法、装置、计算机设备及存储介质 - Google Patents

访问代码自动生成方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN110531971B
CN110531971B CN201910809564.2A CN201910809564A CN110531971B CN 110531971 B CN110531971 B CN 110531971B CN 201910809564 A CN201910809564 A CN 201910809564A CN 110531971 B CN110531971 B CN 110531971B
Authority
CN
China
Prior art keywords
entity
database
code
program set
generating
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
CN201910809564.2A
Other languages
English (en)
Other versions
CN110531971A (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.)
New Trend International Logis Tech Co ltd
Original Assignee
New Trend International Logis Tech Co ltd
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 New Trend International Logis Tech Co ltd filed Critical New Trend International Logis Tech Co ltd
Priority to CN201910809564.2A priority Critical patent/CN110531971B/zh
Publication of CN110531971A publication Critical patent/CN110531971A/zh
Application granted granted Critical
Publication of CN110531971B publication Critical patent/CN110531971B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了访问代码自动生成方法、装置、计算机设备及存储介质,其中,方法包括:传入与数据库特征相关的扩展包,并加载辅助程序集;读取实体框架针对所述数据库的代码包,获取数据库中的表、字段和外键信息;加载实体与接口程序集,获取实体中的字段属性、外键属性以及获取操作接口;对于实体与接口程序集中每个实体的定义,查找并修改对应的实体框架针对所述数据库的代码包,并保存修改后的实体框架针对所述数据库的代码包;并生成基于每个操作接口定义的方法的代码包;编译生成的代码包,并引用辅助程序集,生成操作程序集。本申请可自动化生成代码,减少总开发工作量、增强程序稳定度、提升开发效率并缩短用户修改的响应时间。

Description

访问代码自动生成方法、装置、计算机设备及存储介质
技术领域
本申请涉及数据库代码技术领域,尤其涉及访问代码自动生成方法、装置、计算机设备及存储介质。
背景技术
在工业软件开发过程中,对数据库相关的基础操作,例如数据库记录的增加、删除、修改和查询等,占据了总工作量的相当比例。这些操作繁琐且易错,且通常会根据用户的需求而经常性的被要求快速修改。为了解决上述问题,现有技术主要提供有以下三种方案:第一种方案是手工处理,这也是主流处理方法,即手工完成数据库相关的操作代码;第二种方案是通过界面(含页面)分析产生数据库操作的相关代码;第三种方案是通过读取中间层代码分析,产生数据库操作的相关代码。
然而上述三种方案均存在不足之处:
对于第一种方案:占用程序开发人员的工作量比例大,容易出错,且响应修改的时间较长。
对于第二种方案:适用于网页程序,且为业务不复杂的情况。对于简单查询、录入的操作可以良好适应,但对于表单之间相关性复杂的情况,或需要提供非界面接口(例如给其他程序代码调用的处理接口),则无法良好适配或者完整适配实现。应用此种模式时,通常需先开发界面,而非先定义接口,因此也无法与复杂程序、大型程序对应的开发模型需要模型(例如CMMI)中的分层设计原则匹配。
对于第三种方案:由于代码本体编写时的灵活度较高,分析代码实现的难度较大。为此,通常只能对简单功能的分析,不宜处理复杂的需求。例如可以分析出查询命令,但对查询中复杂的条件、关系映射、外键查询结果引用、各类排序、以及附加用户自定义的查询代码,通过源码分析抽取会有相当高的难度,通常只能限制程序功能来完成基础实现。
鉴于现有技术存在的上述问题,因此有必要对现有技术进行优化和改进。
申请内容
本申请实施例提供了访问代码自动生成方法、装置、计算机设备及存储介质,以自动化生成代码,减少总开发工作量、提升开发效率并缩短用户修改的响应时间。
第一方面,本申请实施例提供了一种数据库访问代码自动生成方法,其包括:
传入与数据库特征相关的扩展包,并加载辅助程序集;
读取实体框架针对所述数据库的代码包,获取数据库中的表、字段和外键信息;
加载实体与接口程序集,获取实体中的字段属性、外键属性以及获取操作接口;
对于实体与接口程序集中每个实体的定义,查找并修改对应的实体框架针对所述数据库的代码包,并保存修改后的实体框架针对所述数据库的代码包;并生成基于每个操作接口定义的方法的代码包;
编译生成的代码包,并引用辅助程序集,生成操作程序集。
第二方面,本申请实施例提供了一种数据库访问代码自动生成装置,其包括:
扩展包传入模块,用于传入与数据库特征相关的扩展包,并加载辅助程序集;
代码包读取模块,用于读取实体框架针对所述数据库的代码包,获取数据库中的表、字段和外键信息;
程序集加载模块,用于加载实体与接口程序集,获取实体中的字段属性、外键属性以及获取操作接口;
代码包生成模块,用于对于实体与接口程序集中每个实体的定义,查找并修改对应的实体框架针对所述数据库的代码包,并保存修改后的实体框架针对所述数据库的代码包;并生成基于每个操作接口定义的方法的代码包;
程序集生成模块,用于编译生成的代码包,并引用辅助程序集,生成操作程序集。
第三方面,本申请实施例提供了一种计算机设备,其包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现第一方面所述的数据库访问代码自动生成方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现第一方面所述数据库访问代码自动生成方法。
本申请实施例提供了一种数据库访问代码自动生成方法,该方法包括传入与数据库特征相关的扩展包,并加载辅助程序集;读取实体框架针对所述数据库的代码包,获取数据库中的表、字段和外键信息;加载实体与接口程序集,获取实体中的字段属性、外键属性以及获取操作接口;对于实体与接口程序集中每个实体的定义,查找并修改对应的实体框架针对所述数据库的代码包,并保存修改后的实体框架针对所述数据库的代码包;并生成基于每个操作接口定义的方法的代码包;编译生成的代码包,并引用辅助程序集,生成操作程序集。该方法由于采用从程序集反射分析,而不采用界面分析,开发人员不需要先开发界面,也不需要对每个功能均开发界面,故更适合工业软件开发,符合工业软件的需求特色,从数据逻辑有选择的生成界面,比从界面生成数据逻辑更有实用性。由于采用从程序集反射分析,而不采用源码分析,开发人员可以不受制于开发语言,也不必受制于源码格式要求,使得开发人员可以更好的上手,并以符合其企业规定的代码规范开发程序,而不必兼顾代码分析器所定义的格式。本申请实施例同时还提供了一种数据库访问代码自动生成装置、一种计算机可读存储介质和一种计算机设备,具有上述有益效果,在此不再赘述。
附图说明
为了更清楚地说明本申请实施例技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的数据库访问代码自动生成方法的流程示意图;
图2为本申请实施例提供的数据库访问代码自动生成装置的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本申请说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本申请。如在本申请说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。
还应当进一步理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
请参阅图1,图1为本申请实施例一种数据库访问代码自动生成方法的流程示意图,所述方法包括:
S101、传入与数据库特征相关的扩展包,并加载辅助程序集;
本实施例的实施主体为生成器,即可以自动生成访问代码的生成器。生成器本身是数据库中性的,对于少量需要因数据库种类不同而不同的代码,在生成器外以扩展包的方式实现。通常,这些扩展包包括了参数名称的过滤方式、类型的映射关系。例如,如果数据库采用的是SqlServer,则需要传入与SqlServer相关的扩展包。
另外,在这个传入扩展包的过程中,也会加载辅助程序集,其中的辅助程序集将被引用于操作程序集。所述辅助程序集中包括操作程序集中共性代码部分,通过单独提取,可以减少代码生成量,加快生成与编译的时间。
S102、读取实体框架针对所述数据库的代码包,获取数据库中的表、字段和外键信息;
S103、加载实体与接口程序集,获取实体中的字段属性、外键属性以及获取操作接口;
S104、对于实体与接口程序集中每个实体的定义,查找并修改对应的实体框架针对所述数据库的代码包,并保存修改后的实体框架针对所述数据库的代码包;并生成基于每个操作接口定义的方法的代码包;
所述查找并修改对应的实体框架针对所述数据库的代码包包括:修改类名、属性名,删除未经使用的外键属性,并对应修改Context文件(数据库上下文)。在此过程中发生的映射异常,会导致生成代码失败,故会提示程序开发人员具体错误信息,以便修改好实体类、操作接口后重新进行流程。
在Entity Framework Core(实体框架核心)生成的Context文件中,记录了它生成的类的名称(即类名)、属性的名称(即属性名)与实际数据库的表的名称、字段的名称的映射关系。Context文件保存了数据库表的名单(每个表的名称与对应的类,但不包括表中字段数据)、表之间的关系(例如外键)、表的主键与索引。通过对Context文件的代码分析,可获得数据库的结构。
通常的,数据库有自己的命名规则,且其命名规则与程序编写的命名规则不同。例如数据库中的字段名称通常为以大写字母开始,有时会使用大量缩写;而程序编写的命名规范中要求变量中的单词应符合语法的大小写规范,通常为一个每个单词的首字母大写。鉴于此,在Entity Framework Core自动生成的代码中,会进行一次映射转换。但由于这种转换仅针对英文语法进行,可能无法良好的适配于实际情况。例如字段名SKUId,根据英文语法转换为Skuid,而实际上使用SkuId更符合实际规范。此外,用于外键关联的属性,通常以对方表实体类的名字作为属性名,此名称也可能无法良好的表示其用途,并可能产生歧义。此时,用户自行编译的实体类中,可能使用了其他名字代替。
本申请实施例中,以用户自行编译的实体类中的类、属性的名称,结合其上标注的表名与字段名,在Context文件中查找到Entity Framework Core自动生成的代码中对应的名字,修改Context代码,使其符合用户自行编译的实体类的实际命名。另外,当原始Context文件中包含有一些外键,但在用户行编写的实体类中没有体现的,也需要从Context文件中删除。在Entity Framework Core自动生成的代码中,会将数据库的所有外键进行以下3个操作:(1)在引用表的实体类中增加属性,指向被引用的记录,(2)在被引用表的实体类中增加集合属性(当一对多时)或者普通属性(当一对一时),指向引用了当前记录的记录,(3)在Context文件中增加关联代码。而实际使用中,用户可能不希望在实体类中体现这些属性,或者仅不希望使用上述(2)的功能,此时需要将Context中的关联代码修改,以配合这种情况。
实体框架针对所述数据库的代码包,默认情况是由Entity Framework Core命令行scaffold指令生成。生成的代码包括一个Context文件,以及每个表、视图对应一个实体类文件。本申请实施例使用用户自行编写的实体类代替上述的实体类文件,并在Context文件中对应修改名称。另外,当原始Context文件中包含有一些外键,但在用户行编写的实体类中没有体现的,也需要从Context文件中删除。因此,需要生成一个修改后的Context文件,才能与用户自行编写的实体类,构成完整的实体框架针对所述数据库的代码包。
生成基于每个操作接口定义的方法的代码包是指:用户会以接口的方式定义出需要完成的每个方法,而本申请实施例负责实现这些方法的编写工作。
例如,有个实体类(表)为Table1,其中包括三个属性(字段)A、B、C,用户希望以C为条件,查询所有C等于某个传入值的结果的集合,则用户会编写一个接口文件,其中包括这样一个方法描述:Table1[]GetAllByC(string c),并在这个方法描述上增加一些属性,以用来说明具体操作。例如需要在方法上附加一个DatabaseQueryAttribute,说明这是一个查询方法。同时,会在参数C上附加一个DatabaseConditionParameterAttribute,此Attribute有两个参数:PropertyName指明这个参数对应的属性名,如果空缺则系统会自动查找一个与其参数名相近的属性名;Comparer描述了使用何种方式比较这个值与目标属性。最终方法会写为
Figure BDA0002184588170000061
本申请实施例则会根据这个指令,生成一个实现了此接口的类文件时,生成满足其要求的完整代码。
同时,如果这个查询本身还要再要求A必须等于B,则可以通过上文提到的查询扩展功能实现。用户需要再编写好一个方法,例如
Figure BDA0002184588170000062
Figure BDA0002184588170000071
之后,在方法前部再附加一句[DatabaseAdditionalQuery(typeof(MyHelper),"WhenAEqualsB")],本申请实施例即理解需要在原始查询之上,需要附加这个方法的条件之后,再获取查询结果并返回。
此外,本申请实施例的方法还包括:生成描述信息实体。描述信息实体中包括了实体类以及其所有内含属性、操作接口中定义的所有方法的描述信息,此信息用于生成操作界面。描述信息实体是一个对象,可以序列化保存成文本文件,包含有完整的实体类信息(类名、其中属性)以及接口中定义的操作信息。此文件由生成器生成,但不被本申请的任何组件使用。根据步骤S102-S104,已经获得了所有描述信息实体内的信息,其中步骤S102获取了数据库的信息,步骤S103获得了用户实体类和方法的信息(方法的信息读取未在步骤S103中体现),步骤S104获得了两者的映射关系。描述信息实体被保存出来,用于自动化生成操作界面。本申请实施例是基于实体与方法生成代码,因此在开发过程中,开发人员并不会预先准备界面。因此,尽可能使用同一套机制,能生成简单的界面代码,会对开发者更有利。本申请实施例专注于数据访问代码的自动生成,因此只会导出相关的描述信息实体,而不负责将其生成其它代码。
此外,本申请实施例的方法还包括:生成辅助代码包。所述辅助代码包包括对上述实例的构造、生存期管理、事务池管理、Context池管理、访问接口等。
本申请实施例生成的主体业务代码,需要一些其他代码辅助才可以完成工作。例如,方法对数据库连接的构建,需要代码实现数据库连接创建的功能;使用事务或者共享数据库对象时,需要维护这些公共变量的生存周期并协调并发争用;上述代码生成后,调用时也需要一个统一的入口点,以用来索引所有生成的方法所在的类的对象。这些辅助代码,有些与此数据库结构密切相关,这些代码只能在生成了之前步骤的代码后才可以生成,并最终与它们一起被编译;有些则与数据库结构无关,即每次生成的代码均完全相同。为了加快生成与编译的过程,这些完全相同的代码,被预先编写好并完成编译,作为辅助程序集(即步骤S101中加载的辅助程序集),在编译上述生成的代码时直接被引用到工程中使用。
上述实例是指生成的方法所在的类的对象。本申请实施例会根据用户编写的接口,分别生成类。在使用时,会将类实例化为对象,并以对象向使用者提供功能服务。
S105、编译生成的代码包,并引用辅助程序集,生成操作程序集。
其中的代码包包括修改后的实体框架针对所述数据库的代码包、基于每个操作接口定义的方法的代码包和辅助代码包。在步骤S105之前可以保存上述代码包,以便进行检查或作为其他方面进行使用。
进一步,所述的数据库访问代码自动生成方法,还包括:
S201、加载数据库的设置和加载生成的操作程序集;其中,加载数据库的设置包括每个需要访问的数据库的类型、连接字符串等信息。加载生成的操作程序集的方式是逐个加载生成的操作程序集。
S202、根据实体与接口程序集中定义的实体类文件与操作接口,传入对应参数,获得执行结果;或者通过定义所述实体与接口程序集提供的操作接口,实现对于事务和数据库上下文的管理。
进一步,所述传入与数据库特征相关的扩展包,并加载辅助程序集之前包括:
S301、预先编写或修改好数据库;
上述过程包括表、视图、字段的定义。
S302、生成实体框架针对所述数据库的代码包;
具体可通过运行Entity Framework Core命令行scaffold指令(dotnet efdbcontext scaffold命令),生成实体框架针对于此数据库的代码包。
S303、对应于每个数据库,生成数据库表的实体类文件;
其中,实体类文件中使用本申请实施例定义的属性(Attribute)标记好表属性(包括表名、数据库连接等)、字段属性(包括字段名、是否作为条件、是否作为值设置等)、外键相关属性(关系数据等)。
S304、生成每个实体的操作接口;
所述生成实体的操作接口包括设置对此实体的增加、删除、修改和查询的方法签名,以及设置对查询扩展的代码实体。操作接口默认需要关联一个被操作的实体,但根据方法的具体功能,也许会关联多个实体,亦有可能无需关联任何实体。
其中,设置对查询扩展的代码实体是指自动生成的查询命令,将会应对于常见的查询要求。对于复杂查询要求,用户可以使用自己编写查询方法的方式实现。但有时,用户的功能可以通过自动生成实现大部分,仅有少量的几个查询功能无法自动实现。如果为此使用复杂查询要求的场景,则用户需要自己实现大量代码。例如简单查询时允许用户传入字段参数,并可以以字段的值与记录进行比较(比如是否相等、各类大小比较、各类包含比较等),但如果用户要求查询A字段比B字段在数据库中的值更大的条件,则无法使用当前定义的接口进行描述。通过查询扩展代码,可以仅提供一个条件过滤,将系统自动生成的查询指令,通过用户的条件过滤再次过滤组合后执行,以实现用户的特殊查询要求。
S305、将所述实体类文件以及操作接口的编写代码编译成实体与接口程序集。
另外,本申请实施例提到的引用是指将已经编译好的程序集关联到当前工程的代码中,允许工程中的代码访问其中的编译好后的功能(类、方法、对象、资源等),而不是将其代码复制到当前工程中。
请参见图2,图2为本申请实施例所提供的一种数据库访问代码自动生成装置的结构示意图;
该装置可以包括:
扩展包传入模块201,用于传入与数据库特征相关的扩展包,并加载辅助程序集;
代码包读取模块202,用于读取实体框架针对所述数据库的代码包,获取数据库中的表、字段和外键信息;
程序集加载模块203,用于加载实体与接口程序集,获取实体中的字段属性、外键属性以及获取操作接口;
代码包生成模块204,用于对于实体与接口程序集中每个实体的定义,查找并修改对应的实体框架针对所述数据库的代码包,并保存修改后的实体框架针对所述数据库的代码包;并生成基于每个操作接口定义的方法的代码包;
程序集生成模块205,用于编译生成的代码包,并引用辅助程序集,生成操作程序集。
该装置由于采用从程序集反射分析,而不采用界面分析,开发人员不需要先开发界面,也不需要对每个功能均开发界面,故更适合工业软件开发,符合工业软件的需求特色,从数据逻辑有选择的生成界面,比从界面生成数据逻辑更有实用性。由于采用从程序集反射分析,而不采用源码分析,开发人员可以不受制于开发语言,也不必受制于源码格式要求,使得开发人员可以更好的上手,并以符合其企业规定的代码规范开发程序,而不必兼顾代码分析器所定义的格式。
进一步的,该装置还可以包括:
数据库与程序集加载模块,用于加载数据库的设置和加载生成的操作程序集;
执行模块,用于根据所述实体与接口程序集中定义的实体类文件与操作接口,传入对应参数,获得执行结果;或者通过定义所述实体与接口程序集提供的操作接口,实现对于事务和数据库上下文的管理。
进一步的,该装置还可以包括:
编写模块,用于预先编写或修改好数据库;
实体框架代码包生成模块,用于生成实体框架针对所述数据库的代码包;
实体类文件生成模块,用于对应于每个数据库,生成数据库表的实体类文件;
操作接口生成模块,用于生成每个实体的操作接口;
程序集编译模块,用于将所述实体类文件以及操作接口的编写代码编译成实体与接口程序集。
进一步的,该装置还可以包括:
辅助代码包生成模块,用于生成辅助代码包,所述辅助代码包包括对实例的构造、生存期管理、事务池管理、数据库上下文池管理和访问接口。
进一步的,该装置还可以包括:
描述信息实体生成模块,用于生成描述信息实体,所述描述信息实体中包括了实体类文件以及其内含属性、操作接口中定义的方法的描述信息。
所述代码包生成模块204包括:
代码包修改单元,用于修改类名、属性名,删除未经使用的外键属性,并对应修改数据库上下文。
由于装置部分的实施例与方法部分的实施例相互对应,因此装置部分的实施例请参见方法部分的实施例的描述,这里暂不赘述。
本申请还提供了一种计算机可读存储介质,其上存有计算机程序,该计算机程序被执行时可以实现上述实施例所提供的方法。该存储介质可以包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请还提供了一种计算机设备,可以包括存储器和处理器,所述存储器中存有计算机程序,所述处理器调用所述存储器中的计算机程序时,可以实现上述实施例所提供的方法。当然所述计算机设备还可以包括各种网络接口,电源等组件。
说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。
还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的状况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

Claims (9)

1.一种数据库访问代码自动生成方法,其特征在于,包括:
传入与数据库特征相关的扩展包,并加载辅助程序集;
读取实体框架针对所述数据库的代码包,获取数据库中的表、字段和外键信息;
加载实体与接口程序集,获取实体中的字段属性、外键属性以及获取操作接口;
对于实体与接口程序集中每个实体的定义,查找并修改对应的实体框架针对所述数据库的代码包,并保存修改后的实体框架针对所述数据库的代码包;并生成基于每个操作接口定义的方法的代码包;
编译生成的代码包,并引用辅助程序集,生成操作程序集;
所述传入与数据库特征相关的扩展包,并加载辅助程序集之前包括:
预先编写或修改好数据库;
生成实体框架针对所述数据库的代码包;
对应于每个数据库,生成数据库表的实体类文件;
生成每个实体的操作接口;
将所述实体类文件以及操作接口的编写代码编译成实体与接口程序集。
2.根据权利要求1所述的数据库访问代码自动生成方法,其特征在于,还包括:
加载数据库的设置和加载生成的操作程序集;
根据所述实体与接口程序集中定义的实体类文件与操作接口,传入对应参数,获得执行结果;或者通过定义所述实体与接口程序集提供的操作接口,实现对于事务和数据库上下文的管理。
3.根据权利要求1所述的数据库访问代码自动生成方法,其特征在于,所述辅助程序集包括操作程序集中的共性代码部分。
4.根据权利要求1所述的数据库访问代码自动生成方法,其特征在于,还包括:
生成辅助代码包,所述辅助代码包包括对实例的构造、生存期管理、事务池管理、数据库上下文池管理和访问接口。
5.根据权利要求1所述的数据库访问代码自动生成方法,其特征在于,还包括:
生成描述信息实体,所述描述信息实体中包括了实体类文件以及其内含属性、操作接口中定义的方法的描述信息。
6.根据权利要求1所述的数据库访问代码自动生成方法,其特征在于,所述查找并修改对应的实体框架针对所述数据库的代码包包括:
修改类名、属性名,删除未经使用的外键属性,并对应修改数据库上下文。
7.一种数据库访问代码自动生成装置,其特征在于,包括:
扩展包传入模块,用于传入与数据库特征相关的扩展包,并加载辅助程序集;
代码包读取模块,用于读取实体框架针对所述数据库的代码包,获取数据库中的表、字段和外键信息;
程序集加载模块,用于加载实体与接口程序集,获取实体中的字段属性、外键属性以及获取操作接口;
代码包生成模块,用于对于实体与接口程序集中每个实体的定义,查找并修改对应的实体框架针对所述数据库的代码包,并保存修改后的实体框架针对所述数据库的代码包;并生成基于每个操作接口定义的方法的代码包;
程序集生成模块,用于编译生成的代码包,并引用辅助程序集,生成操作程序集;
编写模块,用于预先编写或修改好数据库;
实体框架代码包生成模块,用于生成实体框架针对所述数据库的代码包;
实体类文件生成模块,用于对应于每个数据库,生成数据库表的实体类文件;
操作接口生成模块,用于生成每个实体的操作接口;
程序集编译模块,用于将所述实体类文件以及操作接口的编写代码编译成实体与接口程序集。
8.一种计算机设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至6任一项所述的数据库访问代码自动生成方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述数据库访问代码自动生成方法。
CN201910809564.2A 2019-08-29 2019-08-29 访问代码自动生成方法、装置、计算机设备及存储介质 Active CN110531971B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910809564.2A CN110531971B (zh) 2019-08-29 2019-08-29 访问代码自动生成方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910809564.2A CN110531971B (zh) 2019-08-29 2019-08-29 访问代码自动生成方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN110531971A CN110531971A (zh) 2019-12-03
CN110531971B true CN110531971B (zh) 2023-01-03

Family

ID=68665163

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910809564.2A Active CN110531971B (zh) 2019-08-29 2019-08-29 访问代码自动生成方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN110531971B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111367932B (zh) * 2020-03-06 2023-05-12 深圳市今天国际物流技术股份有限公司 数据库表单变更通知方法、装置、计算机设备及存储介质
CN113031963B (zh) * 2021-03-24 2023-09-12 北京字节跳动网络技术有限公司 条件编译的实现方法、装置、设备及存储介质
CN113704289A (zh) * 2021-08-31 2021-11-26 北京乾元大通技术有限公司 一种基于dbio接口的方法、系统、设备及介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012164177A (ja) * 2011-02-08 2012-08-30 Root42 Inc プログラム自動生成システム
CN105631337A (zh) * 2015-03-31 2016-06-01 卡巴斯基实验室股份制公司 控制机器代码的本机图像访问操作系统资源的系统及方法
CN105677323A (zh) * 2015-12-31 2016-06-15 合肥大多数信息科技有限公司 一种自动生成数据库操作层代码的方法
CN109189383A (zh) * 2018-08-28 2019-01-11 厦门海迈科技股份有限公司 代码文件的生成方法、装置、计算设备和存储介质
CN109471619A (zh) * 2018-11-20 2019-03-15 北京千丁互联科技有限公司 Mybatis代码生成方法、装置及计算机终端

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8407667B2 (en) * 2009-03-20 2013-03-26 Microsoft Corporation Inferring missing type information for reflection
US8407788B2 (en) * 2009-05-29 2013-03-26 Oracle International Corporation Methods and systems for implementing a self defending/repairing database
US20110271248A1 (en) * 2010-04-29 2011-11-03 Microsoft Corporation Converting controls into source code
US20110288998A1 (en) * 2010-05-24 2011-11-24 Bank Of America Corporation Deposit For Non-Account Holders
US10621372B2 (en) * 2012-05-03 2020-04-14 Salesforce.Com, Inc. Method and system for generating database access objects

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012164177A (ja) * 2011-02-08 2012-08-30 Root42 Inc プログラム自動生成システム
CN105631337A (zh) * 2015-03-31 2016-06-01 卡巴斯基实验室股份制公司 控制机器代码的本机图像访问操作系统资源的系统及方法
US9384364B1 (en) * 2015-03-31 2016-07-05 AO Kaspersky Lab System and method of controlling access of a native image of a machine code to operating system resources
CN105677323A (zh) * 2015-12-31 2016-06-15 合肥大多数信息科技有限公司 一种自动生成数据库操作层代码的方法
CN109189383A (zh) * 2018-08-28 2019-01-11 厦门海迈科技股份有限公司 代码文件的生成方法、装置、计算设备和存储介质
CN109471619A (zh) * 2018-11-20 2019-03-15 北京千丁互联科技有限公司 Mybatis代码生成方法、装置及计算机终端

Also Published As

Publication number Publication date
CN110531971A (zh) 2019-12-03

Similar Documents

Publication Publication Date Title
Ebert et al. Gupro-generic understanding of programs an overview
CN110531971B (zh) 访问代码自动生成方法、装置、计算机设备及存储介质
US7624401B2 (en) Reflection-based processing of input parameters for commands
Bézivin et al. A canonical scheme for model composition
CN106611044B (zh) 一种sql优化方法及设备
US10592220B2 (en) Metadata-driven binding of converted source code to original source code
Akehurst et al. Implementing associations: UML 2.0 to Java 5
CN111367893A (zh) 数据库版本迭代的方法及装置
CN111736813A (zh) Jpa代码的生成方法、装置、终端设备及存储介质
CN110543299A (zh) 一种云计算管理平台代码生成方法和装置
CN116560642A (zh) 代码生成方法及其装置、电子设备及存储介质
Jongeling et al. Lightweight consistency checking for agile model-based development in practice
CN109344306B (zh) 一种领域多标准元数据定制化在线汇交与服务方法及系统
CN104573053B (zh) 一种基于xml的配置项模板动态定制方法
Emmerich et al. Object-oriented database management systems for construction of CASE environments
CN111126008A (zh) 基于xsd的代码生成方法、装置、计算机设备及存储介质
Woods et al. A semantic foundation for architectural reengineering and interchange
CN114925142A (zh) 一种orm框架的多类型数据库兼容方法、装置、设备及介质
Lengyel et al. Implementing an OCL Compiler for .NET
JPH07182179A (ja) オブジェクト指向データベース管理装置
Kosanović et al. Applang–A DSL for specification of mobile applications for android platform based on textX
Drux et al. Embedding Textual Languages in MagicDraw
Laleau et al. An automatic generation of B specifications from well-defined UML notations for database applications
JP3050467B2 (ja) データ項目辞書生成方法
Zhang et al. Using ATL to receive model transformation in MDA

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