前言
前一陣子給大家介紹了一個可以將Expression表達式樹解析成Transact-SQL的項目Expression2Sql。
之后得到了廣大讀者的一些好評,也使得博主更有動力繼續更新下去,然后一些園友也給出了一些極具建設性的意見,也有部分園友反饋了一些bug。最近一段時間,博主也集中精力,抽出一些時間做了一次更新,本篇文章將介紹本次更新的內容。
簡單易用,幾分鍾即可上手使用,因為博主在設計Expression2Sql的時候就盡可能的按照Transact-SQL的語法語義風格來設計,只要調用者熟悉基本的Transact-SQL語法即可瞬間無憂開碼,大大降低了學習Expression2Sql的成本,甚至零成本。對象化操作,鏈式編程,支持多表復雜關聯查詢,任意組裝sql,自動生成表別名,參數化賦值,防止sql注入,支持SQLServer、MySQL、Oracle、SQLite等多數據庫,生成極度美觀的sql字符串(格式化)等諸多優點。
Expression2Sql的設計初衷就是職責非常單一、干凈清爽,純粹就是輸入表達式樹,然后經過它的解析之后,便可返回Transact-SQL給調用方。所以它的使用場景主要是用於和第三方的ORM或者是基於ado.net的原生DbHelper幫助類做對接,使其能夠支持對象化、表達式樹的鏈式編程。
具體詳情可以前往此篇博文一探究竟:介紹一個可以將Expression表達式樹解析成Transact-SQL的項目Expression2Sql
感謝大家踴躍提意見,不少園友建議用Expression2Sql打造一個O/R mapping數據訪問組件,沒錯,這也是Expression2Sql的優勢。
可以,在下一篇博文中,博主就講解 Expression2Sql + DbHelper + Mapping = ORM ,最大化解耦拆分成獨立的組件。
偽代碼如下:
public static List<T> Query<T>(ExpressionToSql<T> expression) { string sql = expression.Sql; DataTable dt = DbHelper.ExecuteDataTable(sql, expression.DbParams); List<T> list = Mapping.ToListEntity<T>(dt); return list; }
在做形參賦值時報錯,現已解決。
對於括號優先級的處理,現已支持。
增加Insert方法
給查詢字段取別名
提供靜態類和實例類的兩種調用方式
Expression2Sql組件的核心對象ExpressionToSql是實例類,調用的時候還得對象實例化,然后通過構造函數注入數據庫sql語法分析器。但是博主考慮到很多時候,工作或學習當中,一般單數據庫類型居多,所以使用靜態類來調用,會非常的方便快捷。於是博主拋磚引玉,封裝了基於SQLServer、MySQL、Oracle、SQLite數據庫的的靜態類。當然調用方可以借鑒這些靜態類,自行封裝這4種常用數據庫之外的靜態類。