一种ORM实现方法及相关设备与流程

文档序号:26851247发布日期:2021-10-09 02:01阅读:188来源:国知局
一种ORM实现方法及相关设备与流程
一种orm实现方法及相关设备
技术领域
1.本发明涉及数据处理技术领域,特别涉及一种orm实现方法及相关设备。


背景技术:

2.protocol buffers(protobuf),是google公司开发的一种类似于xml的数据描述语言。它能够将结构化数据序列化,应用于数据存储、通信协议等方面。通过protobuf,用户可以定义数据的结构,并生成基于不同类型的语言代码。用户定义的数据流可以轻松地在传递并不破坏原有的程序,并且用户也可以更新这些数据而保证原有的程序也不会受到影响。
3.对象关系映射(object relational mapping,orm),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换,以解决面向对象与关系数据库存在的互不匹配的现象的问题。从效果上说,它创建了一个可在编程语言里使用的“虚拟对象数据库”。如今已有很多免费和付费的orm产品,而有些程序员更倾向于创建自己的orm工具。
4.以上两种技术都广泛应用于软件开发中,但现有的orm实现对protobuf描述的数据类型支持并不好,protobuf类型缺少orm类型必需的字段类型描述,因此不能直接用作orm操作。开发者不得不编写大量中间代码,转换protobuf的数据类型,因此基于protobuf类型的数据,orm并没有提高编码效率。


技术实现要素:

5.本发明要解决的技术问题在于orm实现,针对现有技术的不足,提供一种orm实现方法。
6.为了解决上述技术问题,本发明所采用的技术方案如下:
7.一种orm实现方法,所述方法包括:
8.获取处理数据,其中,所述处理数据的类型为protobuf类型;
9.提取所述处理数据中的api描述符,并根据所述api描述符提取所述处理数据中的类型描述符和字段描述符;
10.根据所述类型描述符,确定所述处理数据对应的类型名称;以及,
11.根据所述字段描述符,构造所述处理数据对应的字段列表;
12.根据所述类型名称和所述字段列表,生成与所述处理数据对应的orm类型。
13.所述orm实现方法,其中,所述根据所述字段描述符,构造所述处理数据对应的字段列表,具体包括:
14.根据所述字段描述符,确定所述处理数据对应的字段参数;
15.根据所述字段参数以及所述处理数据对应的字段信息,构造与所述处理数据对应的字段列表。
16.所述orm实现方法,其中,所述根据所述字段参数以及所述处理数据对应的字段信
息,构造与所述处理数据对应的字段列表,具体包括:
17.根据所述字段参数以及所述处理数据对应的字段信息,生成初始列表;
18.针对每一个所述字段信息,当该字段信息的数据类型为内嵌对象类型时,将该字段列表中的字段信息进行序列化,得到序列数据;
19.将该字段信息对应的序列数据替换该字段信息在所述初始列表中的位置,得到字段列表。
20.所述orm实现方法,其中,所述根据所述类型名称和所述字段列表,生成与所述处理数据对应的orm类型,具体包括:
21.将所述类型名称作为所述orm类型的名称,并将所字段列表作为所述orm类型的内容,生成与所述处理数据对应的orm类型。
22.所述orm实现方法,其中,所述字段参数包括字段名称、字段属性,以及字段选项;
23.所述字段列表中包括字段名称、字段类型以及所述字段信息。
24.所述orm实现方法,其中,所述方法还包括:
25.当检测到针对所述内嵌对象类型的字段信息的处理指令时,将所述处理指定对应的序列数据进行反序列化,得到处理信息;
26.针对所述处理指令,对所述处理信息进行处理。
27.一种orm实现装置,其中,具体包括:
28.获取模块,用于获取处理数据,其中,所述处理数据的类型为protobuf类型;
29.提取模块,用于提取所述处理数据中的api描述符,并根据所述api描述符提取所述处理数据中的类型描述符和字段描述符;
30.确定模块,用于根据所述类型描述符,确定所述处理数据对应的类型名称;
31.构造模块,用于根据所述字段描述符,构造所述处理数据对应的字段列表;
32.生成模块,用于根据所述类型名称和所述字段列表,生成与所述处理数据对应的orm类型。
33.所述orm实现装置,所述构造模块具体包括:
34.确定单元,用于根据所述字段描述符,确定所述处理数据对应的字段参数;
35.构造单元,用于根据所述字段参数以及所述处理数据对应的字段信息,构造与所述处理数据对应的字段列表。
36.一种计算机可读存储介质,所述计算机可读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上任一所述的orm实现方法中的步骤。
37.一种终端设备,其包括:处理器、存储器及通信总线;所述存储器上存储有可被所述处理器执行的计算机可读程序;
38.所述通信总线实现处理器和存储器之间的连接通信;
39.所述处理器执行所述计算机可读程序时实现如上任一所述的orm实现方法中的步骤。
40.有益效果:与现有技术相比,本发明提供了一种orm实现方法及相关设备,所述方法包括获取处理数据,其中,所述处理数据的类型为protobuf类型;提取所述处理数据中的api描述符,并根据所述api描述符提取所述处理数据中的类型描述符和字段描述符;根据
所述类型描述符,确定所述处理数据对应的类型名称;以及,根据所述字段描述符,构造所述处理数据对应的字段列表;根据所述类型名称和所述字段列表,生成与所述处理数据对应的orm类型。本发明通过分析protobuf数据类型的自描述信息,获得数据类型的结构信息,并将此作为orm数据类型的结构,不再需要针对orm类型做结构转换,提高了针对protobuf数据类型处理效率。
附图说明
41.图1为本发明提供的orm实现方法的第一个流程图。
42.图2为本发明提供的orm实现方法的第二个流程图。
43.图3为本发明提供的orm实现装置的结构示意图。
44.图4为本发明提供的终端设备的结构原理图。
具体实施方式
45.本发明提供一种orm实现方法及相关设备,为使本发明的目的、技术方案及效果更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
46.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
47.本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
48.发明人经过研究发现,现有的orm实现对protobuf描述的数据类型支持并不好,protobuf类型缺少orm类型必需的字段类型描述,因此不能直接用作orm操作。开发者不得不编写大量中间代码,转换protobuf的数据类型,因此基于protobuf类型的数据,orm并没有提高编码效率。
49.为了解决上述问题,在本发明实施例中,获取处理数据,其中,所述处理数据的类型为protobuf类型;提取所述处理数据中的api描述符,并根据所述api描述符提取所述处理数据中的类型描述符和字段描述符;根据所述类型描述符,确定所述处理数据对应的类型名称;以及,根据所述字段描述符,构造所述处理数据对应的字段列表,根据所述类型名称和所述字段列表,生成与所述处理数据对应的orm类型。
50.下面结合附图,通过对实施例的描述,对发明内容作进一步说明。
51.如图1所示,本实施提供了一种orm实现方法,所述方法可以包括以下步骤:
52.s10、获取处理数据。
53.具体地,先获取protobuf类型的文件,protobuf使用protoc生成不同语言的源代码文件,产生的源代码文件即本实施例所需要处理的处理数据。在处理数据中包括与所使用的语言的类型的定义等信息。
54.s20、提取所述处理数据中的api描述符,并根据所述api描述符提取所述处理数据中的类型描述符和字段描述符。
55.具体地,处理数据中还包括用于描述其内部中的数据类型的描述符(descriptor)。其中,api描述符(application programming interface descriptor,应用程序接口描述符)是prtobuf所提供的获取描述符的接口。先提取处理数据中的api描述符,再根据api描述符,可提取该处理数据中的自描述信息。自描述信息即描文件自身的数据的信息。进一步地,本实施例中所需要的自描述信息包括类型描述符和字段描述符。
56.由于api描述符中包含有各种类型的描述符的接口,因此先根据api描述符中寻找对应的api信息,然后在api信息中确定用户获取类型描述符的接口以及字段描述符的接口。再根据两者的借口,获取该处理数据中的类型描述以及字段描述符。
57.其中,类型描述符一般表示为“messagedescriptor”,其也被称为消息描述符,一般用于描述中数据中与内容相关的类型有关的信息,例如针对处理数据,类型描述符包含有处理数据所包含的数据的类型。
58.字段描述符一般被描述为“fielddescriptor”,其主要是对一个字段或扩展字段定义的描述。它包含有字段名、字段号、字段类型、字段定义、默认值、是否是扩展字段以及和它关联的描述符。
59.api描述符、类型描述符以及字段描述符是分析protobuf数据类型构造的关键,基于这三个描述符所得到的信息,可以获得数据类型的结构信息。
60.s30、根据所述类型描述符,确定所述处理数据对应的类型名称;以及,根据所述字段描述符,构造所述处理数据对应的字段列表。
61.具体地,得到了类型描述符和字段描述符后,基于两种描述符分别获取构建orm类型所需要的信息。
62.一方面,针对类型描述符,通过类型描述符获得该处理数据中的数据的类型名称,这是类型描述符本身具有的功能。
63.另一方面,通过字段描述符可以确定处理数据中的字段信息的相关参数,即字段参数。同时,根据字段描述符中的描述,可获取该处理数据中需要处理的字段信息。
64.然后根据字段参数以及处理数据对应的字段信息,构造该处理数据对应的字段表格。字段列表中包括字段列表,字段名称、字段类型等信息。
65.在本实施例的第一种实现方式中,根据字段参数对字段信息的描述限定,以表的形式将字段信息进行整合,得到字段列表。或者根据字段参数设定一个空白表,然后将字段信息填入该空白表中,得到字段列表。进一步地,在本实施例中,表是指数据的存储形式,并非一定要以表格的形式进行展示。
66.进一步地,protobuf内嵌对象类型也可能是message(消息)类型,也就是说,数据模型的字段类型与该处理数据中的常规的字段类型相同或者内嵌对象类型的数据类型极其复杂。而两者所包含的内容并不相同,内嵌对象所包含的是自定义类型的数据,而其他的
字段数据包含的是常规的数据。若构建orm类型,为了避免不同类型的数据进行交叉操作,一般需要将这两种数据分为不同的表存储,采用关联关系,在sql中以外键的形式连接。然而这种方案存在两个缺点。一个是关联数据使用独立的表存储,会有大量的表,占用空间;另一个是在进行查询时,需要使用组合查询,尤其是针对关联数据,操作、查询等操作存在效率低、性能差的问题。
67.因此,为解决protobuf内嵌对象类型的问题,在本实施例的第二种实现方式中,在构造处理数据对应的字段列表过程中,执行以下操作:
68.a10、根据所述字段参数以及所述处理数据对应的字段信息,生成初始列表。
69.具体地,先采用上述的第一种实现方式,根据字段参数以及处理数据对应的字段信息,生成初始列表。此处初始列表的生成方式与前文描述的第一种构造字段列表的方式相类似,只是最后生成的表并非直接作为字段列表,而是初始列表,因此过程在此不再赘述。
70.a20、针对每一个所述字段信息,当该字段信息的数据类型为内嵌对象类型时,将该字段列表中的字段信息进行序列化,得到序列数据。
71.具体地,对初始列表中的每一个字段信息进行类型判断,当该字段信息的数据类型为常规类型时,也就是程序自定义的类型时,不对该字段信息进行处理。
72.当该字段信息的数据类型为内嵌对象类型时,将该字段列表中的字段信息进行序列化。序列化的过程本质是上将对象转换为字节序列,一般对数据采用序列化的目的是为了跨平台存储以及进行网络传输。而本实施例中,采用序列化的目的是为了将内嵌对象类型的字段信息与常规的字段信息在格式内容上存在巨大的区别,以至于在后续操作时,一方面避免误操作,一方面可以减少表的数量,节省空间。
73.对字段信息进行序列化后得到序列数据,序列数据为blob、binary等二进制数据类型,序列化的方式可采用protobuf格式序列化等现有的方式。
74.a30、将该字段信息对应的序列数据替换该字段信息在所述初始列表中的位置,得到字段列表。
75.最后,将该字段信息对应的序列数据替换该字段信息在初始列表中的位置,也就是说,在字段列表中,常规的字段信息仍以其本身的格式类型进行存储,而内嵌对象类型的字段信息以二进制数据为存储类型。
76.与加密等处理方式相比,对序列数据进行反序列化操作速度快且简便;与加标签等方式相比,本实施例采用的序列化操作更能够降低后续针对用户输入的指令进行操作的安全性和准确性。
77.s40、根据所述类型名称和所述字段列表,生成与所述处理数据对应的orm类型。
78.最后将根据类型名称,生成orm类型的名称。并根据所得到字段列表,生成orm类型的内容。得到orm类型的名称和内容,即得到的处理数据对应的orm类型。
79.由于orm实现是对不对应的数据库及指令进行对应,因此根据类型描述符所得到的类型名称就可作为本实施例中处理数据所对应的orm的类型名称。此外,也可以根据该orm类型的命名规则,根据类型名称,生成对应的名称。orm类型的内容也可以直接将字段列表作为其包含的内容,也可根据orm类型的内设参数,对字段列表中的一部分参数进行修改后作为其内容。也就是说,根据预设的关于orm类型的设定参数,可对类型名称和字段列表
进行修改,得到orm类型的名称以及内容。
80.生成orm类型后,即可生成针对protobuf数据库增加、减少、删除、修改、查找、合并等操作的语句,这样就实现了orm的功能。
81.进一步地,当用户下发处理指令时,也就是检测到针对所述orm类型的处理指令时,先对该处理指令进行类型判断。
82.若该处理指令针对的是orm类型中的常规字段信息时,直接执行该处理指令。若该处理针对的是orm类型中的内嵌对象类型的字段信息,由于存储的数据并未所能够直接处理的数据类型,而是二进制的序列数据,因此先将该处理指令对应的序列数据进行反序列化,得到处理信息。反序列化即将二进制数据转换为原数据状态。最后针对处理指令,对处理信息进行相对应的处理。
83.如图3所示,基于上述orm实现方法,本实施例提供了一种orm实现装置100,其中,所述orm实现装置100包括:
84.获取模块110,用于获取处理数据,其中,所述处理数据的类型为protobuf类型;
85.提取模块120,用于提取所述处理数据中的api描述符,并根据所述api描述符提取所述处理数据中的类型描述符和字段描述符;
86.确定模块130,用于根据所述类型描述符,确定所述处理数据对应的类型名称;
87.构造模块140,用于根据所述字段描述符,构造所述处理数据对应的字段列表;
88.生成模块150,用于根据所述类型名称和所述字段列表,生成与所述处理数据对应的orm类型。
89.其中,所述构造模块140具体包括:
90.确定单元,用于根据所述字段描述符,确定所述处理数据对应的字段参数;
91.构造单元,用于根据所述字段参数以及所述处理数据对应的字段信息,构造与所述处理数据对应的字段列表。
92.其中,所述构造单元具体用于:
93.根据所述字段参数以及所述处理数据对应的字段信息,生成初始列表;
94.针对每一个所述字段信息,当该字段信息的数据类型为内嵌对象类型时,将该字段列表中的字段信息进行序列化,得到序列数据;
95.将该字段信息对应的序列数据替换该字段信息在所述初始列表中的位置,得到字段列表。
96.其中,所述生成模块150具体用于:
97.将所述类型名称作为所述orm类型的名称,并将所字段列表作为所述orm类型的内容,生成与所述处理数据对应的orm类型。
98.其中,所述字段参数包括字段名称、字段属性,以及字段选项;
99.所述字段列表中包括字段名称、字段类型以及所述字段信息。
100.其中,所述orm实现装置100还包括处理模块,所述处理模块具体用于:
101.当检测到针对所述内嵌对象类型的字段信息的处理指令时,将所述处理指定对应的序列数据进行反序列化,得到处理信息;
102.针对所述处理指令,对所述处理信息进行处理。
103.基于上述orm实现方法,本实施例提供了一种计算机可读存储介质,所述计算机可
读存储介质存储有一个或者多个程序,所述一个或者多个程序可被一个或者多个处理器执行,以实现如上述实施例所述的orm实现方法中的步骤。
104.基于上述orm实现方法,本发明还提供了一种终端设备,如图4所示,其包括至少一个处理器(processor)20;显示屏21;以及存储器(memory)22,还可以包括通信接口(communications interface)23和总线24。其中,处理器20、显示屏21、存储器22和通信接口23可以通过总线24完成相互间的通信。显示屏21设置为显示初始设置模式中预设的用户引导界面。通信接口23可以传输信息。处理器20可以调用存储器22中的逻辑指令,以执行上述实施例中的方法。
105.此外,上述的存储器22中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取计算机可读存储介质中。
106.存储器22作为一种计算机可读存储介质,可设置为存储软件程序、计算机可执行程序,如本公开实施例中的方法对应的程序指令或模块。处理器20通过运行存储在存储器22中的软件程序、指令或模块,从而执行功能应用以及数据处理,即实现上述实施例中的方法。
107.存储器22可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器22可以包括高速随机存取存储器,还可以包括非易失性存储器。例如,u盘、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁碟或者光盘等多种可以存储程序代码的介质,也可以是暂态计算机可读存储介质。
108.此外,上述计算机可读存储介质以及终端设备中的多条指令处理器加载并执行的具体过程在上述方法中已经详细说明,在这里就不再一一陈述。
109.最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1