本發(fā)明涉及自動映射技術領域,具體為一種基于java的數據庫與實體類自動映射算法。
背景技術:
mybatics框架在配置數據庫與實體類映射關系的時候,采取的是手動配置xml文件來進行配置數據庫與實體類的映射關系。采用手動配置映射關系的方式會占用很多時間,費時又費力,為此,我們提出一種基于java的數據庫與實體類自動映射算法。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種基于java的數據庫與實體類自動映射算法,以解決上述背景技術中提出的問題。
為實現(xiàn)上述目的,本發(fā)明提供如下技術方案:
一種基于java的數據庫與實體類自動映射算法,其特征在于,包括以下步驟:
s1:通過結果集,調用getmetadata獲取元數據,再用獲取的元數據調用getcolumnlabel方法來獲取所有的列名;
s2:利用java的發(fā)射機制獲取實體類的所有字段的名字以及類型;
s3:判斷實體類的每個字段類型是否是內聚的其他實體類的類型,分如下兩種情況:
1)不是內聚的字段,則直接采用字符串相似度匹配算法,即levenshtein算法,將該字段名與數據庫列名一一進行匹配,并找到最相似的數據庫表的列名,再使用結果集調用getobject方法來獲取數據,再利用java反射機制將這個數據賦值給實體類對應的字段;
2)是內聚的字段,則采用遞歸的方式,按照步驟s2采用java的反射機制來獲取內聚字段的類型所對應的實體類的所有字段的名字以及類型,再按照第三步一直遞歸下去。
優(yōu)選的,所述步驟s3中1)的字符串相似度算法如下:
優(yōu)選的,所述步驟s3中1)的數據庫表列名的獲取方法,如下所示:
與現(xiàn)有技術相比,本發(fā)明的有益效果是:本基于java的數據庫與實體類自動映射算法,實體類的字段取名不需要嚴格的與數據庫表的列名一致,只需要相似即可,即使實體類里內聚了另一個實體類也能匹配到。與手動配置映射關系相比,自動配置映射省去了程序員大量的時間與精力,提高了編程效率。采用自動匹配的方式來自動配置映射,并且采用字符串相似度算法來匹配字段,實體類的字段名無需與數據庫表的列名一致,能夠匹配具有內聚關系的實體類。
附圖說明
圖1為本發(fā)明的流程示意圖。
具體實施方式
下面將結合本發(fā)明的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明提供一種技術方案:
一種基于java的數據庫與實體類自動映射算法,包括以下步驟:
s1:通過結果集,調用getmetadata獲取元數據,再用獲取的元數據調用getcolumnlabel方法來獲取所有的列名;
s2:利用java的發(fā)射機制獲取實體類的所有字段的名字以及類型;
s3:判斷實體類的每個字段類型是否是內聚的其他實體類的類型,分如下兩種情況:
1)不是內聚的字段,則直接采用字符串相似度匹配算法,即levenshtein算法,將該字段名與數據庫列名一一進行匹配,并找到最相似的數據庫表的列名,再使用結果集調用getobject方法來獲取數據,再利用java反射機制將這個數據賦值給實體類對應的字段;
2)是內聚的字段,則采用遞歸的方式,按照步驟s2采用java的反射機制來獲取內聚字段的類型所對應的實體類的所有字段的名字以及類型,再按照第三步一直遞歸下去,如圖1所示。
判斷字段是否是內聚的實體類算法:
具體的,步驟s3中1)的字符串相似度算法如下:
具體的,步驟s3中1)的數據庫表列名的獲取方法,如下所示:
本基于java的數據庫與實體類自動映射算法,實體類的字段取名不需要嚴格的與數據庫表的列名一致,只需要相似即可,即使實體類里內聚了另一個實體類也能匹配到。與手動配置映射關系相比,自動配置映射省去了程序員大量的時間與精力,提高了編程效率。采用自動匹配的方式來自動配置映射,并且采用字符串相似度算法來匹配字段,實體類的字段名無需與數據庫表的列名一致,能夠匹配具有內聚關系的實體類。
盡管已經示出和描述了本發(fā)明的實施例,對于本領域的普通技術人員而言,可以理解在不脫離本發(fā)明的原理和精神的情況下可以對這些實施例進行多種變化、修改、替換和變型,本發(fā)明的范圍由所附權利要求及其等同物限定。