999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

輕量級ORM數據訪問框架SqlBuilder.NET的設計與實現

2018-09-10 13:18:21溫皓晴靳曉松
計算機與網絡 2018年3期

溫皓晴 靳曉松

摘要:基于ORM思想,結合Nhibernate與NBear的優點,提出了一種輕量級ORM數據訪問框架SqlBuilder.NET,旨在為通用數據訪問提供完整的解決方案。Sqlbuilder.NET基于C#語言編寫,主要由OracleSqlBuilder、DBOperation和SqlObjectMarker構成。Sqlbuilder.NET具有一個事務一個日志列表、特殊字符的編解碼、查詢結果多種類型輸出和組件間的松耦合的特性,實現了數據新增、更新的對象化操作及對象化的復雜查詢語句生成等功能。

關鍵詞:SqlBuilder.NET;數據訪問;ORM;NHibernate;Nbear

中圖分類號:TP393文獻標志碼:A文章編號:1008-1739(2018)03-70-3

Design and Implementation of Lightweight ORM Data Access Framework SqlBuilder.NET

WEN Haoqing1, JIN Xiaosong2

(1. The No.2 High School Shijiazhuang, Shijiazhuang Hebei 050000, China; 2. The 54th Research Institute of CETC, Shijiazhuang Hebei 050081, China)

0引言

在應用軟件項目開發中,數據訪問必不可少。為了便于系統的開發維護,根據“高內聚、低耦合”的思想,通過分離數據訪問層與業務邏輯層實現。因此,可以設計獨立的數據訪問構件,在不同的項目中復用。

目前比較流行的.NET數據訪問ORM框架有Nhibernate、Spring.NET及Nbear等[1-3],通過項目實踐發現,這些框架在實現其高擴展性、快速開發及良好的通用性的同時,也會失去一定的靈活性和性能,顯得過于臃腫,這正是Sqlbuilder.NET產生的原因。

1主流數據訪問ORM框架比較

在SqlBuilder.NET設計前,先對現有主流.NET平臺下的ORM框架進行分析:

①Nhibernate:完整的ORM框架[4],功能強大、通用性強,而且有很多輔助工具;缺點就是配置比較多、性能低,執行效率不理想。

②NBear:完整的ORM框架,實現了強類型數據庫查詢語法[5],提供代碼生成工具,性能較高;缺點是配置復雜,開發時很容易出錯,最關鍵的是框架很久未更新。

③IBatis:優點是簡單、實用、功能完整、效率高及運行穩定,SQL和代碼分離,提高了可維護性;缺點是配置文件多,查詢條件麻煩[6]。

2 SqlBuilder.NET的設計思想

通過經驗總結不難發現,數據庫的寫操作中Insert、Update和Delete一般為單表操作,讀操作Select經常會有聯表操作,形式多樣,因此在設計框架時,寫操作可以采用對象操作的方式實現數據庫的操作,例如,Insert.Object(User)就可以將User對象的數據寫入到數據表中。讀操作則分為2種情況,一種是在事務操作中需要返回對象類型或對象數組類型,便于業務邏輯編碼;另一種則只是為了將數據顯示給用戶,只需返回非對象數據類型。

因此,Sqlbuilder.NET在基于ORM思想的同時,結合了Nhibernate與NBear的優點,既實現了Nhibernate類似Save(Object)插入數據的簡便操作,又實現了類似NBear對復雜查詢語句的對象化操作,甚至在復雜語句的支持度上比NBear還要強大。由于目前開發針對的都是Oracle數據庫,因此SQL語句對象化方面針對Oracle寫了很多函數,可以使用Oracle的很多特性。

3 SqlBuilder.NET的構成

Sqlbuilder.NET是基于C#語言編寫的輕量級對象化ORM數據訪問構件,實現了類似LINQ的數據庫查詢語法,可以像使用一個.NET類的方法一樣生成SQL語句并訪問數據庫,由項目驅動開發而成,通過不斷地重構和增加功能,目前已經趨于穩定。

Sqlbuilder.NET沒有XML映射文件,在性能與開發效率上做了一定的取舍,但是對性能的影響并不是很大。另外SqlBuilder.NET的設計思想避免了對象間的復雜關系,因此,Sqlbuilder.NET雖然犧牲了一定的開發效率,卻在性能上帶來了質的飛躍。

Sqlbuilder.NET主要由以下三部分組成:

①OracleSqlbuilder:采用對象的形式生成標準SQL語句,此組件包含了Oracle數據庫的一些特性函數,例如“FOR UPDATE”鎖機制;

②DBOpertion:目前實現了對Oracle、SqlServer、MySql和Access數據庫的增刪改查(查詢包括分頁查詢)、事務及存儲過程等操作,可以通過XML配置文件實現數據庫的切換,而無需更改代碼;

③SqlObjectMarker:主要是將數據庫的表生成為C#實體對象,其中表字段對應對象的屬性,還有用于OracleSqlbuilder構建SQL語句的特殊字段。

4 SqlBuilder.NET的特性

SqlBuilder.NET在具有部分ORM框架的特性(事務、異常)的同時,還具有以下特性:

①一個事務一個日志列表:大部分ORM框架的日志系統都是鏈式的,沒有分組,而SqlBuilder.NET則會一個事務對應一個SQL列表,SQL列表中包含SQL執行后影響的行數或者返回結果的行數,提供了日志接口,可以根據系統需求寫入數據庫或者文件中。

②特殊字符的編解碼:SqlOracleSqlBuilder在生成SQL語句時會對數據中的特殊字符進行編碼,在DBOpertion訪問數據庫返回數據時進行解碼。不僅保證了用戶的輸入意愿,同時防止了危險字符對系統的威脅,還有就是該功能對于開發人員透明。

③查詢結果多種類型輸出:支持將查詢結果輸出為Datatable、Dataset及Json(String)等

④組件間的松耦合:SqlOracleBuilder與DBOpertion松耦合,2個組件可以根據項目的實際需要獨立使用,對于2個組件有關聯的地方則可以通過配置解耦。

5 SqlBuilder.NET的設計實現

由SqlObjectMarker連接數據庫將數據表生成特定的C#實體對象(數據表與實體對象一一對應,沒有了ORM框架對象之間的關聯),OracleSqlBuilder通過實體中的字段構建對象化SQL,并解析成標準SQL語句,最后DBOpertion與數據庫通信通過SQL語句返回數據,如圖1所示。

5.1 OracleSqlbuilder的設計實現

OracleSqlBuilder主要使用了泛型編程和反射機制,其過程就是將C#類型轉換成相應SQL的特定類型,調用不同類的不同方法實現SQL語句的拼接,從而形成標準的SQL語句。

OracleSqlBuilder提取了數據表的通用屬性和方法,比如數據表的表名、別名及序列等,形成ModelBase類,所有的數據庫實體對象將繼承ModelBase。圖中User實體對象繼承自Modelbase,由SqlObjectMarker生成。Select、Insert、Update、Delete可以依據User表生成相應的SQL語句,它們是由含有不同業務邏輯功能的類組成的,其類的分類主要依據SQL語句的關鍵字封裝而成,比如“Group By”及“Order By”等。

其中TableField類是OracleSqlBuilder的重要組成部分,負責字段的各種SQL函數(如SUM、Distinct和Max函數)、賦值、運算以及復雜語句中子語句的生成等。

5.2 DBOpertion的設計實現

DBOpertion采用了設計模式中的抽象工廠模式,基于ADO.NET,同時結合反射+配置文件實現數據庫訪問,其中數據庫的連接字符串與數據庫類型可以在配置文件中配置,設計UML圖如圖2所示。

IDBOperation中定義了數據庫操作的通用接口,包括數據庫連接的打開關閉、SQL語句執行、存儲過程執行及事務處理等。OracleOperation、AccessOperation、MySqlOperation和SqlServerOperation實現了IDBOperation接口,DbOper則通過反射與配置文件相結合的設計思想實現面向IDBOperation的接口編程。

由于解除了ORM框架中對象間的復雜關系,DBOpertion可以依據業務邏輯選擇不同的返回類型,例如復雜查詢,沒有必要返回實體列表,而只需返回DataTable類型的數據,減少數據到實體的轉換;在業務邏輯編寫時需要根據數據做不同的操作,那么就可以返回實體對象,整體上可以極大提高系統的性能。

5.3 SqlObjectMarker的設計實現

SqlObjectmarker實體對象生成工具采用C/S模式開發,數據庫相關配置采用XML配置文件,便于一次配置和團隊開發。SqlObjectMarker可以自動獲取指定數據庫中的表及其注釋,生成的實體類會根據數據庫中的注釋加入C#注釋,便于開發時的自動提示,提高開發效率。

5.4 SqlBuilder.NET的不足

由于數據表與實體是一一對應的關系,并且沒有XML映射文件的支持,因此在數據表發生字段變化的時候需要修改實體對象文件,造成框架的不靈活。當然框架也會存在其他的不足之處,每個框架的存在都會有它的優勢和不足,都會在性能與功能上做一些取舍。

6結束語

SqlBuilder.NET作為一個輕量級的數據訪問框架,其設計初衷就是為了減小開發的復雜度,因此后續的應用中,將繼續保持簡單、實用的設計理念,不會為了追求通用性而變得臃腫。希望該框架能夠在以后的應用開發中繼續發揮作用并接受磨練,使其更加穩定、實用。

參考文獻

[1]李斌勇,李慶.基于NHibernate的ORM映射機制研究[J].計算機技術與發展,2009,19(7):32-34.

[2]潘立武,張建平.基于NBear企業級應用設計與開發[J].電腦編程技巧與維護,2009(13):28-33.

[3]歐勤坪,余建橋.基于SpringMVC+iBATIS框架的生物信息數據庫的設計與實現[J].西南大學學報(自然科學版), 2008,30(11):142-145.

[4]劉冬.NHibernate從入門到精通系列(1)[EB/OL].(2011/2/14)[2018-1-1]. http://www.cnblogs.com/GoodHelper/archive/ 2011/02/14/nhiberante_01.html.

[5] NBear Google Group.NBear常見問題集[EB/OL].(2006/12/13)[2018-1-1] https://www.cnblogs.com/fengmk2 / archive/2006/12/13/590447.html.

[6] PatrickLiu.Net環境下比較流行的ORM框架對比[EB/OL].(2016/10/25) [2018-1-1].http://www.cnblogs.com/PatrickLiu/ p/5995592.html.

主站蜘蛛池模板: 自拍中文字幕| a级毛片视频免费观看| 婷婷综合色| 国产在线无码一区二区三区| 天天躁夜夜躁狠狠躁图片| 九九热精品视频在线| 色婷婷在线播放| 伊人成人在线| 老司机aⅴ在线精品导航| 亚洲精品高清视频| 波多野吉衣一区二区三区av| 中文字幕人成人乱码亚洲电影| 亚洲欧美日韩中文字幕一区二区三区| 国产精品xxx| 国产乱人伦偷精品视频AAA| 乱人伦视频中文字幕在线| 自拍亚洲欧美精品| 久久99精品久久久久纯品| 999国内精品视频免费| 99免费视频观看| 欧美在线视频不卡第一页| 日本AⅤ精品一区二区三区日| 99在线视频免费| 欧美精品亚洲精品日韩专| 国产第三区| 97久久精品人人做人人爽| 亚洲国产精品一区二区高清无码久久| 欧美第二区| 亚洲AV无码一区二区三区牲色| 伊人激情久久综合中文字幕| 亚洲精品免费网站| 青青青国产精品国产精品美女| 啪啪永久免费av| 无码日韩视频| 久久a级片| 色综合婷婷| 色久综合在线| 91毛片网| 在线播放国产99re| 四虎国产成人免费观看| 成人午夜久久| 尤物成AV人片在线观看| 国产91在线免费视频| 久久福利网| 中文字幕亚洲综久久2021| 99成人在线观看| 日本不卡在线播放| 国产又色又刺激高潮免费看| 精品91视频| 国产成人综合在线观看| 91精品视频播放| 日本妇乱子伦视频| 亚洲综合久久一本伊一区| 国产一级一级毛片永久| 日韩小视频在线播放| 国产一区二区三区视频| 日韩欧美国产另类| 波多野结衣一区二区三区四区| 天堂va亚洲va欧美va国产| 91精品国产情侣高潮露脸| aa级毛片毛片免费观看久| 九九热在线视频| 全部毛片免费看| 亚洲激情区| 任我操在线视频| 欧美在线综合视频| 国产性生交xxxxx免费| 亚洲六月丁香六月婷婷蜜芽| 欧美第一页在线| 思思99热精品在线| 国产在线视频自拍| 欧美精品亚洲二区| 国产日本视频91| 婷婷色一区二区三区| 国产老女人精品免费视频| A级毛片无码久久精品免费| 91综合色区亚洲熟妇p| 操国产美女| 在线中文字幕日韩| 玖玖精品视频在线观看| 国产成人精品视频一区二区电影| 91亚洲免费|