CN107992566A - 基于Hibernate的数据映射方法及系统 - Google Patents
基于Hibernate的数据映射方法及系统 Download PDFInfo
- Publication number
- CN107992566A CN107992566A CN201711229296.4A CN201711229296A CN107992566A CN 107992566 A CN107992566 A CN 107992566A CN 201711229296 A CN201711229296 A CN 201711229296A CN 107992566 A CN107992566 A CN 107992566A
- Authority
- CN
- China
- Prior art keywords
- mapping
- class
- hibernate
- data
- entity
- 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
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/24—Querying
- G06F16/245—Query processing
- G06F16/2453—Query optimisation
- G06F16/24534—Query rewriting; Transformation
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于Hibernate的数据映射方法及系统,该基于Hibernate的数据映射方法包括:步骤S1:获取原生SQL,并执行原生SQL;步骤S2:初始化映射类;步骤S3:在transformTuple方法中,取得原生SQL查询的字段名,通过数据实体类对象获得实体类属性名,循环比对原生SQL查询的字段名和实体类属性名,将原生SQL查询的字段名的字段值赋予属性,完成字段与实体属性的映射,使字段和实体属性的映射被隐藏于所述映射类中;步骤S4:通过所述映射类获取数据实体对象。本发明可以使用户不需要考虑如何去映射,极大简化了利用Hibernate执行原生SQL的复杂度。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种基于Hibernate的数据映射方法及系统。
背景技术
Hibernate是一个应用非常广泛的开源的数据持久层的框架,其核心思想是建立对象与数据库表的映射关系,使开发者可以使用对象的思维操作数据库。
但是,Hibernate映射数据库方式不够灵活,与数据库表相对应的映射对象,其属性必须与数据库表一一对应。如果表与表之间关系复杂,关联的表比较多,对象中的映射较多,在构建映射对象时,而且即使是单个表的查询,也会查询关联映射的表,造成不必要的资源开销和降低查询效率。
为了提高查询效率,降低资源开销,对于复杂的业务,当前的做法是,使用原生SQL进行查询,但这样一来,数据库表字段就不能直接映射到对象上了,对返回来的数据,要通过数据集下标与数据对象属性一一对应,容易出错,且复用率低。如果以后该多加一个属性或者删除一个,需要修改的地方就比较多了,这样可维护性就比较差。
发明内容
本发明的目的在于提供一种基于Hibernate的数据映射方法及系统,能够使用户不需要考虑如何去映射,简化利用Hibernate执行原生SQL的复杂度。
为实现上述目的,本发明一种基于Hibernate的数据映射方法,包括:
步骤S1:获取原生SQL,并执行原生SQL;
步骤S2:初始化映射类,所述映射类继承于Hibernate的ResultTransformer,以利用其查询结果转换方法transformTuple,将原生SQL对应的实体类全名字符串传入所述映射类中,通过利用反射机制取得数据实体类对象;
步骤S3:在transformTuple方法中,取得原生SQL查询的字段名,通过数据实体类对象获得实体类属性名,循环比对原生SQL查询的字段名和实体类属性名,将原生SQL查询的字段名的字段值赋予属性,完成字段与实体属性的映射,使字段和实体属性的映射被隐藏于所述映射类中;
步骤S4:通过所述映射类获取数据实体对象。
进一步地,在步骤S1中,通过Hibernate的createSQLQuery方法执行所述原生SQL。
进一步地,在步骤S2中,将所述数据实体类全名字符串通过映射类构造函数传入到所述映射类中。
进一步地,在步骤S3中,通过方法参数aliases取得原生SQL查询的字段名。
为实现上述目的,本发明的技术方案还提供了一种基于Hibernate的数据映射系统,包括:
执行模块,用于获取原生SQL,并执行原生SQL;
初始化模块,用于初始化映射类,所述映射类继承于Hibernate的ResultTransformer,以利用其查询结果转换方法transformTuple,以及将原生SQL对应的实体类全名字符串传入所述映射类中,通过利用反射机制取得数据实体类对象;
映射模块,用于在transformTuple方法中,取得原生SQL查询的字段名,通过数据实体类对象获得实体类属性名,循环比对原生SQL查询的字段名和实体类属性名,将原生SQL查询的字段名的字段值赋予属性,完成字段与实体属性的映射,使字段和实体属性的映射被隐藏于所述映射类中;
处理模块,用于通过所述映射类获取数据实体对象。
进一步地,所述执行模块通过Hibernate的createSQLQuery方法执行所述原生SQL。
进一步地,所述初始化模块将所述数据实体类全名字符串通过映射类构造函数传入到所述映射类中。
进一步地,所述映射模块通过方法参数aliases取得原生SQL查询的字段名。
本发明提供的基于Hibernate的数据映射方法,通过将字段和实体属性的映射被通用的隐藏于映射类中,用户不需要考虑如何去映射,极大简化了利用Hibernate执行原生SQL的复杂度。
附图说明
图1是本发明实施方式提供的一种基于Hibernate的数据映射方法的流程图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
参见图1,图1是本发明实施方式提供的一种基于Hibernate的数据映射方法的流程图,该方法包括:
步骤S1:获取原生SQL,并执行原生SQL;
例如,在步骤S1中,可以通过Hibernate的createSQLQuery方法执行所述原生SQL;
步骤S2:初始化映射类,所述映射类继承于Hibernate的ResultTransformer,以利用其查询结果转换方法transformTuple,将原生SQL对应的实体类全名字符串传入所述映射类中,通过利用反射机制取得数据实体类对象;
例如,在步骤S2中,将所述数据实体类全名字符串通过映射类构造函数传入到所述映射类中;
步骤S3:在transformTuple方法中,取得原生SQL查询的字段名,通过数据实体类对象获得实体类属性名,循环比对原生SQL查询的字段名和实体类属性名,将原生SQL查询的字段名的字段值赋予属性,完成字段与实体属性的映射,使字段和实体属性的映射被隐藏于所述映射类中;
例如,在步骤S3中,可以通过方法参数aliases取得原生SQL查询的字段名;
步骤S4:通过所述映射类获取数据实体对象。
本发明实施方式提供的基于Hibernate的数据映射方法,通过将字段和实体属性的映射被通用的隐藏于映射类中,用户不需要考虑如何去映射,极大简化了利用Hibernate执行原生SQL的复杂度。
本发明基于Hibernate封装一个映射类,在用原生SQL查询时,初始化此类即可得到实体对象,例如,此映射方法的过程如下:
步骤S101:执行原生SQL,对于复杂业务,需要手工编写复杂的SQL来获取需要的数据,或者为避免Hibernate映射机制的性能缺陷(关联映射多的情况下)而手工编写SQL,再使用Hibernate保留的对原生SQL的执行方法执行SQL并取得数据集;
步骤S102:初始化映射类,此映射类继承于Hibernate的ResultTransformer,以利用其查询结果转换方法transformTuple,将原生SQL对应的实体类全名传入映射类中,通过利用反射机制取得数据实体类对象;
步骤S103:表字段与实体属性映射,在transformTuple方法中,通过方法参数aliases取得原生SQL查询的字段名,通过数据实体类对象获得实体类属性名,循环比对字段名和属性名,将字段值赋予属性,即完成表字段与实体属性的映射;
步骤S104:获得实体对象,通过映射类即可得到填充完整的数据实体对象,从而解决了在使用中通过下标使表字段与实体属性一一对应而产生的可维护差的问题;
其中,步骤S101和步骤S104在使用过程中是可以简要的使用方法对象一起达到获取数据实体对象的目的,即从输入SQL,到取得数据实体对象,一行代码即可实现,例如,执行的SQL代码可以为:
String sql=“SELECT TYPEID AS itemTypeld,TYPENAME AS itemTypeNameFROM sample_type WHERE PARENT_ID IS NULL ORDER BY TYPEID”;
List<ItemForm>list=getSession().createSQLQuery(sql).setResultTransformer(new SQLColumnToBean(ItemForm.class)).list();
对于上述的SQL代码,SQL的SELECT中使用别名,通过Hibernate的createSQLQuery方法执行传入SQL;
步骤S102将数据实体类全名字符串通过映射类构造函数传入到映射类中,再通过反射机制初始化为数据实体类对象,如:Object result=resultClass.newInstance(),其中resultClass为数据实体类全名,其结果为:
步骤S103使用transformTuple方法实现字段名与实体属性的映射和赋值,transformTuple方法在Hibernatre执行原生SQL形成数据集后再执行,那么在此方法映射和赋值过程中需要考虑各种数据类型的处理,如布尔值、数值等,填充完成后返回数据实体对象。
本发明实施方式中,字段和实体属性的映射被通用的隐藏于映射类中,用户不需要考虑如何去映射,极大简化了利用Hibernate执行原生SQL的复杂度。
本发明基于Hibernate的数据映射技术,在复杂业务的情况下,对于使用原生SQL查询,可以不必将数据库表字段与数据对象属性一一对应,可以将出错几率降为0,且一旦增加或修改属性,只需修改SQL即可,可维护性高。
本发明实施方式还提供了一种基于Hibernate的数据映射系统,包括:
执行模块,用于获取原生SQL,并执行原生SQL;
初始化模块,用于初始化映射类,所述映射类继承于Hibernate的ResultTransformer,以利用其查询结果转换方法transformTuple,以及将原生SQL对应的实体类全名字符串传入所述映射类中,通过利用反射机制取得数据实体类对象;
映射模块,用于在transformTuple方法中,取得原生SQL查询的字段名,通过数据实体类对象获得实体类属性名,循环比对原生SQL查询的字段名和实体类属性名,将原生SQL查询的字段名的字段值赋予属性,完成字段与实体属性的映射,使字段和实体属性的映射被隐藏于所述映射类中;
处理模块,用于通过所述映射类获取数据实体对象。
例如,所述执行模块可以通过Hibernate的createSQLQuery方法执行所述原生SQL。
例如,所述初始化模块可以将所述数据实体类全名字符串通过映射类构造函数传入到所述映射类中。
例如,所述映射模块可以通过方法参数aliases取得原生SQL查询的字段名。
虽然,上文中已经用一般性说明及具体实施例对本发明作了详尽的描述,但在本发明基础上,可以对之作一些修改或改进,这对本领域技术人员而言是显而易见的。因此,在不偏离本发明精神的基础上所做的这些修改或改进,均属于本发明要求保护的范围。
Claims (8)
1.一种基于Hibernate的数据映射方法,其特征在于,包括:
步骤S1:获取原生SQL,并执行原生SQL;
步骤S2:初始化映射类,所述映射类继承于Hibernate的ResultTransformer,以利用其查询结果转换方法transformTuple,将原生SQL对应的实体类全名字符串传入所述映射类中,通过利用反射机制取得数据实体类对象;
步骤S3:在transformTuple方法中,取得原生SQL查询的字段名,通过数据实体类对象获得实体类属性名,循环比对原生SQL查询的字段名和实体类属性名,将原生SQL查询的字段名的字段值赋予属性,完成字段与实体属性的映射,使字段和实体属性的映射被隐藏于所述映射类中;
步骤S4:通过所述映射类获取数据实体对象。
2.根据权利要求1所述的基于Hibernate的数据映射方法,其特征在于,在步骤S1中,通过Hibernate的createSQLQuery方法执行所述原生SQL。
3.根据权利要求1所述的基于Hibernate的数据映射方法,其特征在于,在步骤S2中,将所述数据实体类全名字符串通过映射类构造函数传入到所述映射类中。
4.根据权利要求1所述的基于Hibernate的数据映射方法,其特征在于,在步骤S3中,通过方法参数aliases取得原生SQL查询的字段名。
5.一种基于Hibernate的数据映射系统,其特征在于,包括:
执行模块,用于获取原生SQL,并执行原生SQL;
初始化模块,用于初始化映射类,所述映射类继承于Hibernate的ResultTransformer,以利用其查询结果转换方法transformTuple,以及将原生SQL对应的实体类全名字符串传入所述映射类中,通过利用反射机制取得数据实体类对象;
映射模块,用于在transformTuple方法中,取得原生SQL查询的字段名,通过数据实体类对象获得实体类属性名,循环比对原生SQL查询的字段名和实体类属性名,将原生SQL查询的字段名的字段值赋予属性,完成字段与实体属性的映射,使字段和实体属性的映射被隐藏于所述映射类中;
处理模块,用于通过所述映射类获取数据实体对象。
6.根据权利要求5所述的基于Hibernate的数据映射系统,其特征在于,所述执行模块通过Hibernate的createSQLQuery方法执行所述原生SQL。
7.根据权利要求5所述的基于Hibernate的数据映射系统,其特征在于,所述初始化模块将所述数据实体类全名字符串通过映射类构造函数传入到所述映射类中。
8.根据权利要求5所述的基于Hibernate的数据映射系统,其特征在于,所述映射模块通过方法参数aliases取得原生SQL查询的字段名。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711229296.4A CN107992566A (zh) | 2017-11-29 | 2017-11-29 | 基于Hibernate的数据映射方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711229296.4A CN107992566A (zh) | 2017-11-29 | 2017-11-29 | 基于Hibernate的数据映射方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN107992566A true CN107992566A (zh) | 2018-05-04 |
Family
ID=62034210
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711229296.4A Pending CN107992566A (zh) | 2017-11-29 | 2017-11-29 | 基于Hibernate的数据映射方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107992566A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109739872A (zh) * | 2018-12-27 | 2019-05-10 | 苏州思必驰信息科技有限公司 | 一种sql语句处理的实现方法、系统及操作方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339559A (zh) * | 2008-07-18 | 2009-01-07 | 北京航空航天大学 | 一种数据持久化实现方法 |
CN103678609A (zh) * | 2013-12-16 | 2014-03-26 | 中国科学院计算机网络信息中心 | 一种基于分布式关系-对象映射处理的大数据查询的方法 |
CN105389339A (zh) * | 2015-10-20 | 2016-03-09 | 咸亨国际(杭州)物联网信息产业有限公司 | 一种快速生成数据库sql语句和实体类的工具 |
-
2017
- 2017-11-29 CN CN201711229296.4A patent/CN107992566A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101339559A (zh) * | 2008-07-18 | 2009-01-07 | 北京航空航天大学 | 一种数据持久化实现方法 |
CN103678609A (zh) * | 2013-12-16 | 2014-03-26 | 中国科学院计算机网络信息中心 | 一种基于分布式关系-对象映射处理的大数据查询的方法 |
CN105389339A (zh) * | 2015-10-20 | 2016-03-09 | 咸亨国际(杭州)物联网信息产业有限公司 | 一种快速生成数据库sql语句和实体类的工具 |
Non-Patent Citations (2)
Title |
---|
360个人图书馆: "使用HIBERNATE的SQL查询并将结果集自动转换成POJO", 《HTTP://WWW.360DOC.COM/CONTENT/13/0828/18/203871_310542059.SHTML》 * |
MYEXCEPTION: "运用HIBERNATE的SQL查询并将结果集自动转换成POJO", 《HTTP://WWW.MYEXCEPTION.ORG/SQL/849295.HTML》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109739872A (zh) * | 2018-12-27 | 2019-05-10 | 苏州思必驰信息科技有限公司 | 一种sql语句处理的实现方法、系统及操作方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9146955B2 (en) | In-memory, columnar database multidimensional analytical view integration | |
CN104573115B (zh) | 支持多类型数据库操作的集成接口的实现方法及系统 | |
CA2483963C (en) | A method, computer program and computer for accessing data in an environment of multiple data repositories | |
US7526503B2 (en) | Interactive schema translation with instance-level mapping | |
RU2421798C2 (ru) | Модель данных для объектно-реляционных данных | |
US7480666B2 (en) | Method for navigating beans using filters and container managed relationships | |
CN1224875A (zh) | 数据库管理系统的动态修改 | |
US20070027862A1 (en) | Anonymous types for statically typed queries | |
US11550785B2 (en) | Bidirectional mapping of hierarchical data to database object types | |
US20180314957A1 (en) | Inferring a label namespace | |
CN111078205B (zh) | 一种模块化编程方法、装置、存储介质及电子设备 | |
US10997131B1 (en) | Using a member attribute to perform a database operation on a computing device | |
US20150356158A1 (en) | Storage-Side Scanning on Non-Natively Formatted Data | |
CN100561476C (zh) | 一种基于asn类型对象的代码生成方法 | |
US9373093B2 (en) | Gateway service manager for business object applications | |
US11829814B2 (en) | Resolving data location for queries in a multi-system instance landscape | |
US10402380B1 (en) | Interactive user interface for schema transformation | |
US20190347341A1 (en) | Method and system for schema transformation | |
CN1256663C (zh) | 一种嵌入式系统中具有实时帮助功能的命令行管理方法 | |
CN107992566A (zh) | 基于Hibernate的数据映射方法及系统 | |
Feng et al. | Transforming UML class diagram into cassandra data model with annotations | |
US20100088283A1 (en) | System and method for managing database applications | |
US20030233373A1 (en) | Method, computer program product, and system for automatic class generation with simultaneous customization and interchange capability | |
US20070078882A1 (en) | System and method for merging manual parameters with predefined parameters | |
CN114365130A (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20180504 |