前言
關於Dapper的介紹,其實多到可以算月經文了XD
不過剛好有機會使用到,所以就順著介紹一下。
Dapper是一個輕量型的ORM工具,著重在效能與速度,所以他也只有一個Dll檔而已
非常輕量。
有興趣的讀者們可以到GitHub上看一下SouceCode,都是公開的。
雖然耳聞Dapper這個神器很久了,只是由於筆者是EF派的,所以已經很少會接觸到純下SQL的部分。
不過最近,筆者剛好需要撰寫SQL Command,於是又重新投入 DataReader、DataSet、DataTable的懷抱。
只是在使用的過程中,由於不想要讓程式碼看起來太過骯髒,於是在上層多包了一層父類來減少重複的程式碼
不過在撰寫查詢的時候卻發現到一個問題:
以下由DataReader做一個簡單的示範。
片段程式碼:
1 | // 設定相關資料庫連線參數 |
由於已經習慣寫EF的我,對於這樣的操作方式會覺得顯得不夠直觀。
明明已經在Select當中定義了要讀取哪些欄位,但是在最後DataReader的時候,還是需要再次手動撈取欄位
後來研究了許久,還是決定投入EF的懷抱,即使是透過SQL Command的方式。
Dapper的使用方式相當簡單:
首先在NuGet當中先安裝Dapper工具
接著就可以直接撰寫啦!
Dapper主要是透過 Extension Method 來擴充 SqlConnection的類別
因此當你在最上層 using了 Dapper後
1 | using Dapper; |
你會發現SqlConnection多了以下東西:
主要是針對Query來去做擴充。
後來了解後發現原理其實很簡單
就是先取得泛型的類別,並透過for迴圈的方式,將每一個的欄位資料,Mapping到指定的類別當中,
最後再裝回List,結束。
1 | object obj; |
而Dapper使用方法呢其實就是這樣子:
1 | // 設定相關資料庫連線參數 |
這裡使用泛型版本的 Query 方法,以便將查詢結果自動對應至先前定義好的 Student 物件的屬性。
如此一來就可以快速的取得資料了。
結果如下:
另外,Dapper本身也支援具名參數,主要是為了防止 sql injection
使用方法也相當的簡單:
1 | String sql = "select Student_Id,Student_Name from Student where Student_Name=@Name"; |
有任何家教、案子 或技術相關問題 請都歡迎聯繫我