「不少人都不太承認以第三方ORM,由於考慮的點不夠全面,沒有大用戶羣體的ORM有保證,這點是不能否認確是事實。可是每每用戶羣體大的ORM又有不足之處,今天咱們就來聊聊關於ORM的話題,打造一款人見人愛的ORM框架。」git
季健國(螞蟻Ant),10年的工做經驗, 7年的IT經驗是一枚名副其實的屌絲程序員。技術無邊界,編程靠思想。由於對這份職業的熱愛,因此我到如今還在一直從事這份職業。目前主要研究方向爲ORM底層核心,爬蟲,WebAPI,SOA,Docker,Xamarin,微信小程序,微服務架構;我的愛好:閱讀,跑步,打羽毛球,擼代碼;歡迎有同共愛好的小夥伴爲友加我QQ:181589805程序員
前言sql
在這十年的技術生涯中,須要走過多少路,從中得到坎坷成長。我和許多技術人同樣,曾經徘徊過,也迷茫過。這十年裏的成長談不上有什麼豐功偉績,天然就談不上什麼技術大牛,我只是想把本身的所見所聞親身經歷的點點滴滴作一些總結。由於這中間有太多的成長感悟,我也會將把本身所學到的技術以及踩過的坑逐步分享給你們。但願能爲有一樣成長過程當中的朋友產生共鳴,幫助你們少踩一些坑。數據庫
話說十年磨一劍,此次分享關於打造一款人見人愛的AntORM框架,也算是我這十年當中磨出來其中一把劍。今天分享出來但願能夠幫助正在成長中的農碼們,爲項目儘量縮短開發週期以及提升工做效率。讓你們也儘可能擺脫經常因需求的變化,致使無休此的加班一直擼呀擼。由於每每選擇一個好的框架,纔是你應對需求變化能夠做出快速上線帶來幫助,這樣也能讓你減小加班,多一點時間陪陪家人。編程
此次是我第一次作這樣的分享, 之後我還給你們分享個人一些好的框架。這邊也呼籲一下你們,但願能彙集到一批志同道合的小夥伴們入羣(QQ羣號:20870428)相互交流一塊兒成長。小程序
項目地址:https://git.coding.net/jjg0513/AntORM.git 或者進羣網盤裏有完整可運行的項目文件微信小程序
我爲何還要造這個輪子緩存
可能你們都會有一個疑問:「目前市面上這麼多ORM框架層出不窮,爲何還要花代價再造這套ORM框架?」。也正由於市面上ORM框架不少花樣百出,但使人滿意的ORM框架倒是少至又少。接下來我會從入門階段到興趣階段再到開發階段進行講述造輪子的過程。微信
其實我對ORM框架接觸的時間也比較長,剛入道的時候就已經開始在用ORM框架了。回想起來,我最先接觸ORM大概是在2008年富深協通項目中用到ORM框架。如今看來那時候的項目也寫了一些最簡單的ORM框架,ORM的使用也都是在一些老前輩們指引下照葫蘆畫瓢,畢竟那時候對ORM也沒有什麼概念,天然也就不懂ORM什麼原理,當時也是剛入行不久。在此以前項目都是直接寫SQL語句來操做數據庫,而ORM框架能夠直接給實體進行賦值調對應的方法,就能夠對數據庫進行操做,以爲能夠少寫很多代碼維護項目也很方便。再後面的項目中又用到SubSonic框架,這也算是我用到稍微有模有樣的ORM框架。但用起來配置仍是很煩索,對數據庫的約束也太多並且每一個表都要有固定幾個字段複雜性就不用說了,相對於一個剛入行的新手用起來有點痛苦。架構
我對ORM框架有着濃厚的興趣是2010年在淘常州項目中,讓我有更深刻了解到ORM框架底層的原理。由於當時發現他們的項目不是用的第三方ORM框架,而是用他們本身寫的ORM框架,這套框架使用起來要比以前接觸的ORM框架要方便不少,因而在空餘時間的時候,我就把項目裏面的DLL文件反編譯成源碼,就對ORM的底層和實現進行一翻研究,也就從那時候我開始就對ORM框架產生濃厚的興趣。有點點想寫一套ORM框架的衝動,惋惜那時候本身感受尚未能力去寫一套ORM框架。
對項目快速變化沒有ORM框架的痛苦是2013年在同程旅遊的項目中。以前一直都在常州工做生活,也是一次偶然的有機會去蘇州全新的開始,讓我有幸進入同程旅遊景區研發團隊。本來覺得進這樣千人研發團隊,應該有它們本身比較牛的ORM框架來學習一下。進去以後卻發現我接觸的大部分的項目都是沒有用ORM框架,基本都是簡單三層加SOA的架構來實現,不過我是以爲他們的SOA框架比較不錯的。居據說也一些大牛從JAVA開源的SOA移植過來的,之後有機我再給你們分享關於他們的SOA框架。當時他們的項目都是用SQL語句來實現,也許是由於直接寫SQL語句要比ORM去解析SQL語句的效率要高。但隨着不斷擴張,致使需求經常在變化,這樣數據庫字段也是會隨之增長或減小,就會讓項目從實體層、數據層、業務層、頁面層統統改一遍。因此那時候我天天就是苦逼加班擼代碼,就想要是能在項目用上ORM框架那該多好,最起碼能解決不用這樣苦逼一直加減字段全部地方都要改,提及來都是淚......只能認命去承受現實的痛苦,那時候也就下定決定要本身搞一個好的ORM框架來提升工做效率和性能的想法,畢竟在這以前我也接觸了很多ORM的框架了。因而,完全激發個人想寫一套ORM的念頭,因而就利用空閒不要加班的時間就開始在網上查資料,找一些開源的ORM框架來研究以及學習它們好的思想,從中提取一些好的核心開始造輪子之旅。
總算功夫不負有心人,用了差很少一年的時間,一套屬於本身的ORM框架也就問世。最初個人ORM框架也只是能實現一些基本的增刪改功能,但我已經很滿意。我就把ORM框架運用本身的項目中,可是,長此以往,問題就出現了當訪問量大的時候就會出現很慢,說明在性能方面仍是有缺陷的。後來就仔細分析了代碼和在網上查了一些資料,發現是因爲大量用了一些反射和裝箱拆箱操做致使性能降低。因而開始加入一些緩存技術,當項目啓動時會把全部實體屬性先進行遍歷放到緩存中去,後面再使用該實體的一些屬性就直接到緩存中取。這樣效率和性能放面上獲得大大改善,但在多表查詢上面還不能實現。只能經過視圖來代替,缺陷就是若是項目裏面視圖多了也很難維護。沒辦法當時我也算是已經用盡本身的洪荒之力,只能實現這麼多了。
直到2015年我到景尚集團的一個項目中用了EF框架,雖然以前也聽過這框架但尚未真正使用過,這個ORM框架必竟是微軟本身的框架,至於微軟的東西你們都懂的,就是過於寵大想要用好它,沒個一年半載的是駕馭很差這玩意,我也便進行了一翻學習開始使用,以後發現Linq語句能實現很好的多表關聯查詢。因而我就開始借鑑Linq的寫法來讓本身的ORM框架也慢慢的實現數據庫多表查詢,而且支持lambda表達式。就這樣個人ORM框架也能實現了多表查詢的方法,最近總算把一套接近完美的ORM框架打造問世了。掐指一算先後總共花了差很少有三年左右時間,全是利用了一些本身的空餘時間不斷打磨完成的。也但願從此這個ORM框架能給你們在項目帶來幫助,真正作到讓使用者簡單、輕量、高效。
其實有時去重複造輪子並非一件壞事,經過造輪子檢驗本身是否真的懂,每每聽到的、想到的和作出來徹底不同。並且找本身感興趣的去作,事實證實興趣不只是最好的老師,仍是讓你任勞任怨前進的動力。但我這裏並非鼓勵你們去造輪子,由於這裏面造輪子的過程當中的心酸只有經歷過才能體會到。
若是上面還不足以讓您明白我爲何要造這個輪子,那最後我要告訴您的是:由於我是一枚任性的程序員,我就是喜歡造本身的輪子!
什麼是ORM
在介紹AntORM框架以前,先給你們科普一下什麼是ORM,若是你是大鳥對ORM很瞭解能夠直接繞道進行下一個環節AntORM架構的介紹。對象關係映射(英語Object Relation Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序技術,用於實現面向對象編程語言裏不一樣類型系統的數據之間的轉換。從效果上說,它實際上是建立了一個可在編程語言裏使用的--「虛擬對象數據庫」。簡單的說:ORM是一種工具,能夠自動地把領域對象數據存儲到關係型數據庫(如MS SQL Server),而不須要大量的編碼。
ORM包含三個重要的部分:
1. 領域對象(Domain class objects):咱們定義的類。
2. 關係型數據庫對象(Relational database objects):數據庫表,視圖,存儲過程等。
3. 映射信息(Mapping information):領域對象與關係型數據庫對象之間轉換的信息。
ORM容許開發者把數據庫設計和領域對象設計獨立開,讓程序更具備可維護性和可擴展性。
它還提供了基本的增刪改查的功能,開發者不須要手動再編寫這部分代碼。
一個典型的數據庫與應用程序的ORM交互以下圖所示:
AntORM框架的介紹
AntORM是打造一款人見人愛的輕量、高效的.NET C#數據庫訪問框架(ORM)。目前AntORM能夠支持五種數據庫。AntORM主要借鑑了Linq語法以及藉助lambda 表達式來實現利用實體生成SQL語句,能夠徹底用面向對象的方式就能輕鬆執行多表鏈接查詢、分組查詢、聚合查詢、插入數據、批量刪除更新、數據庫事務和分表分庫靈活切換等操做。徹底不須要拼接sql,開發容錯率極高。固然也提供原生sql查詢。並且開發者徹底能夠根據請求實體和響應實體來調用AntORM中提供的方法跟蹤每一個方法執行時間和執行SQL語句。框架設計主打輕量、用法簡單,無第三方依賴。AntORM的任務就是將關係型數據庫中的數據經過ORM層映射爲對象,使之可以應用於面向對象程序,方便編程。您能夠經過上面提供的項目地址進行下載Demo進行調試運行進行測試。
它確實爲大多數程序員提供了便利:
一、程序員不須要再動手寫SQL語句,或者說大部分狀況下不須要動手寫,只須要調用一系列函數便可完成數據庫CURD操做。
二、對不一樣數據庫管理系統的鏈接以及操做進行了抽象,程序員徹底能夠不考慮使用的是什麼數據庫以及數據庫的版本。
三、對數據庫應用方便,同一個項目中能夠支持同時多數據庫,以及數據讀寫分離都支持數據庫,配置簡單易操做。
四、每一個方法均可以根據執行操做數據庫返回的實體,能夠跟蹤方法所執行的SQL語句和執行所消耗的時間。
總之,在項目開發中,它的確爲咱們帶來了高效的開發效率。
今天就先分享到這邊,接下來我會教你們如何使用這套AntORM框架,敬請期待!若是你們有任何疑問能夠留言,或者好的建議能夠隨時聯繫我。在此謝謝!