基于对象关系映射的数据处理方法和数据处理装置制造方法及图纸

技术编号:32818588 阅读:29 留言:0更新日期:2022-03-26 20:15
本申请公开了基于对象关系映射的数据处理方法。该数据处理方法包括:定义Java对象类;对所述Java对象类进行解析以获取类属性;对数据库进行查询以获得结果集;对所述结果集的元数据进行解析以获取数据列属性;根据所述类属性建立映射关系;以及根据所述映射关系,将所述结果集映射为所述Java对象类的实例列表,其中,在建立映射关系时,根据所述类属性中的映射注解的类型执行多个映射方法中的至少一个。该数据处理方法利用映射注解进行映射配置,从而可以简化映射配置,在建立映射关系时允许多种映射方法,从而可以提高映射的灵活性和成功率。率。率。

【技术实现步骤摘要】
基于对象关系映射的数据处理方法和数据处理装置


[0001]本专利技术涉及数据库
,特别涉及基于对象关系映射(object relation mapping,缩写为ORM)的数据处理方法和数据处理装置。

技术介绍

[0002]随着软件系统的复杂化,已经开发出多种软件生产技术以提高开发效率、质量和可靠性,这些软件生产技术包括组件技术、可视编程、 模式和框架。框架是复杂软件系统的一部分子系统的设计和实现。在框架基础上进行二次开发,可以重用于类似应用场景的不同软件系统中。
[0003]在数据库的应用中,对象关系映射(object relation mapping,缩写为ORM)的作用是通过使用描述对象和数据库之间映射的元数据,将关系数据库中的数据转换成程序中的对象,或者,将程序中的对象自动持久化到关系数据库中。
[0004]在主流的持久化框架中,例如,Hibernate 、MyBatis、Spring Data JDBC,均实现了对象关系映射。
[0005]Hibernate是一个全表映射的框架,自动化程度较高,对于Java对象到单个数据表的映射和转换非常方便,只需要定义Java对象和映射关系(Java对象的字段与数据表的列的映射关系),甚至无需编写查询用SQL。但其对多表关联的支持比较差。也正是由于自动化程度较高,所以自定义的灵活性相对较弱。
[0006]相对于Hibernate而言,MyBatis是一个半自动映射的框架,需要手动匹配Java对象、SQL和映射关系。因为需要手动编写SQL,所以其灵活性较强。但是,其映射关系的配置都是需要手动配置XML文件来完成,这样不仅会增加操作复杂度,也会使配置变得很庞杂。
[0007]Spring Data JDBC框架则提供了一个简单的转换机制,开发者只需要定义Java对象和SQL,结果集到Java对象的转换由一个BeanPropertyRowMapper的工具来完成,其实现将结果集中的一行转换为JavaBean。其靠的是推测数据库数据库结构中的列名与Java对象类的属性中变量名的对应关系。例如:依据数据库结构中的列名biz_type,推测出Java对象类的变量名为bizType。该框架在灵活性和操作复杂度方面,相比Hibernate和MyBatis较为适中,自定义SQL无论是单表还是多表连接都可支持,无需定义大量的映射配置文件,简化操作,可以满足大多数转换场景。
[0008]Spring Data JDBC框架的主要缺陷是对结果集中数据列的列名和Java对象类的属性中,变量名的规范性(命名规范)依赖较强,一旦列名与对象类的变量名不按照规范,则匹配就会失败,导致转换失败。例如,对于列名“reverse_1”,Java对象类的变量名为“reverse1”;对于列名is_force(是否强制),Java对象类的变量名为“force”时(按照规范对于布尔字段,不能是isForce)。
[0009]因此,期望开发出可以简化映射配置且适应性强的对象关系映射框架技术。

技术实现思路

[0010]鉴于上述问题,本专利技术的目的在于提供一种基于对象关系映射的数据处理方法和数据处理装置,其中,根据类属性中的映射注解的类型执行多个映射方法中的至少一个,以简化映射配置以及提高映射的灵活性和成功率。
[0011]根据本专利技术的第一方面,提供一种基于对象关系映射的数据处理方法,包括:定义Java对象类;对所述Java对象类进行解析以获取类属性;对数据库进行查询以获得结果集;对所述结果集的元数据进行解析以获取数据列属性;根据所述类属性建立映射关系;以及根据所述映射关系,将所述结果集映射为所述Java对象类的实例列表,其中,在建立映射关系时,根据所述类属性中的映射注解的类型执行多个映射方法中的至少一个。
[0012]优选地,所述多个映射方法包括第一映射方法和第二映射方法,在所述类属性包括映射注解的情形下,执行所述第一映射方法,所述第一映射方法根据所述映射注解获得所述类属性相对应数据列的列名,以及在所述类属性未包括映射注解的情形下,执行所述第二映射方法,所述第二映射方法根据所述类属性中的变量名获得所述类属性相对应数据列的列名。
[0013]优选地,所述多个映射方法还包括第三映射方法,在采用所述第一映射方法和所述第二映射方法未能成功获得所述类属性相对应数据列的列名的情形下,执行所述第三映射方法,所述第三映射方法包括:根据所述数据列属性中的列名推测列别名;采用所述第一映射方法和所述第二映射方法获得所述类属性相对应的数据列别名;以及根据所述列别名与所述列名的对应关系获得所述类属性相对应的数据列名。
[0014]优选地,所述推测的步骤包括:根据所述类属性中的变量名的命名规范,对所述数据列属性中的列名进行字符串替换以获得列别名。
[0015]优选地,在程序运行时利用Java系统的反射机制获得所述类属性,所述类属性包括:变量名、数据类型、和映射注解至少之一。
[0016]优选地,所述映射注解包括保留字、注解名和多个注解成员,其中,所述多个注解成员至少包括列名。
[0017]优选地,根据所述注解名执行相应的注解规范的映射方法。
[0018]优选地,所述多个注解成员还包括变量注释。
[0019]优选地,将所述结果集映射为所述Java对象类的实例列表的步骤包括:建立列表;逐行读取所述结果集以获得行数据;将所述行数据转换成Java对象类的实例;以及将所述Java对象类的实例添加至列表。
[0020]优选地,将所述行数据转换成Java对象类的实例的步骤包括:构建Java对象类的实例;将所述Java对象类中的变量设置为默认值;根据映射关系,获得与所述变量对应的别名;采用列读取方法,从所述结果集的行数据读取列值;以及将所述Java对象类的变量设置为相应的列值。
[0021]优选地,在从所述结果集的行数据读取列值的步骤之前,还包括:获取所述Java对象类中的变量数据类型、以及所述结果集中相应数据列的数据类型;以及根据所述数据类型选择所述列读取方法。
[0022]优选地,在所述Java对象类中的变量数据类型为字符型、数值型和时间型之一时,根据所述类属性数据类型选择相应的列读取方法,从所述结果集的行数据读取列值。
[0023]优选地,在所述类属性数据类型为日期型时,根据所述数据列的数据类型选择相应的列读取方法。
[0024]优选地,选择相应的列读取方法的步骤包括:如果所述数据列的数据类型为日期时间型,则选择时间戳型的列读取方法,如果所述数据列的数据类型为日期型,则选择按日期型的列读取方法,如果所述数据列的数据类型为时间戳型,则选择时间戳型的列读取方法,以及如果所述数据列的数据类型为时间型,则选择时间型的列读取方法。
[0025]优选地,在所述类属性数据类型为布尔型时,根据所述数据列的数据类型选择相应的列读取方法和数据转换方法。
[0026]优选地,选择相应的列读取方法和数据转换方法的步本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于对象关系映射的数据处理方法,包括:定义Java对象类;以及在程序运行时,执行以下步骤:对所述Java对象类进行解析以获取类属性;对数据库进行查询以获得结果集;对所述结果集的元数据进行解析以获取数据列属性;根据所述类属性建立映射关系;以及根据所述映射关系,将所述结果集映射为所述Java对象类的实例列表,其中,在建立映射关系时,根据所述类属性中的映射注解的类型执行多个映射方法中的至少一个。2.根据权利要求1所述的数据处理方法,其中,所述多个映射方法包括第一映射方法和第二映射方法,在所述类属性包括映射注解的情形下,执行所述第一映射方法,所述第一映射方法根据所述映射注解获得所述类属性相对应数据列的列名,以及在所述类属性未包括映射注解的情形下,执行所述第二映射方法,所述第二映射方法根据所述类属性中的变量名获得所述类属性相对应数据列的列名。3.根据权利要求2所述的数据处理方法,其中,所述多个映射方法还包括第三映射方法,在采用所述第一映射方法和所述第二映射方法未能成功获得所述类属性相对应数据列的列名的情形下,执行所述第三映射方法,所述第三映射方法包括:根据所述数据列属性中的列名推测列别名;采用所述第一映射方法和所述第二映射方法获得所述类属性相对应的数据列别名;以及根据所述列别名与所述列名的对应关系获得所述类属性相对应的数据列名。4.根据权利要求3所述的数据处理方法,其中,所述推测的步骤包括:根据所述类属性中的变量名命名规范,对所述数据列属性中的列名进行字符串替换以获得列别名。5.根据权利要求2所述的数据处理方法,其中,在程序运行时利用Java系统的反射机制获得所述类属性,所述类属性包括:变量名、数据类型、和映射注解至少之一。6.根据权利要求5所述的数据处理方法,其中,所述映射注解包括保留字、注解名和多个注解成员,其中,所述多个注解成员至少包括列名。7.根据权利要求6所述的数据处理方法,其中,根据所述注解名执行相应的注解规范的映射方法。8.根据权利要求6所述的数据处理方法,其中,所述多个注解成员还包括变量注释。9.根据权利要求1所述的数据处理方法,其中,将所述结果集映射为所述Java对象类的实例列表的步骤包括:建立列表;逐行读取所述结果集以获得行数据;将所述行数据转换成Java对象类的实例;以及
将所述Java对象类的实例添加至列表。10.根据权利要求8所述的数据处理方法,其中,将所述行数据转换成Java对象类的实例的步骤包括:构建Java对象类的实例;将所...

【专利技术属性】
技术研发人员:汪永松
申请(专利权)人:安翰科技武汉股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1