項目背景mysql
前一段時間,開始作一個項目,在考慮數據訪問層是考慮技術選型,考慮過原始的ADO.NET、微軟的EF、NH等。再跟經理討論後,經理強調不要用Ef,NH作ORM,後期的sql優化很差作,公司也沒有人對EF,Nh 等orm優化比較熟悉的。強調說的,咱們的項目要作的得簡單,可使用ADO.NET 寫原始的sql。但我本身仍是喜歡ORM的,它能夠提升數據訪問層的開發。有一天,在訂閱張善友 doNet跨平臺微信公衆號裏,看到Dapper的推薦。瞭解以後,我本身喜歡喜歡Dapper,能夠知足我這個項目的經理的要求,同時Dapper 對數據庫的訪問能作到Ado.net同樣快。git
下面的連接是Dapper 在github的地址 https://github.com/StackExchange/dapper-dot-net。github
使用 Dapper 進行簡單增刪改查示例sql
一、首先根據數據庫表定義實體對象, 這個工做徹底可使用T四、Nvelocity或者RazorEngine 寫一個代碼生成器根據數據庫表對象自動生成數據庫表實體對象。這裏我本身根據表寫了一個對象數據庫
2. 在DAL層就可使用實體對象傳參 或者做爲返回值微信
Dapper的優點app
一、Dapper是一個輕型的ORM類ide
二、 Dapper語法簡單,若是你喜歡寫原始的sql,你必定喜歡Dapper。同時團隊人員也很容易上手優化
三、Dapper 速度快,速度接近ADO.NET訪問數據庫的效率。spa
四、多數據庫切換方便
public int UpdateUserRoleByRoleId(UserRoleDbEntity model)
{
int affecgtRow = 0;
string sql = @"UPDATE `userrole`
SET `AuthorityValue` = @AuthorityValue,
`AuthorityDescription` = @AuthorityDescription
WHERE `RoleId` = @RoleId;";
using (IDbConnection conn = new MySqlConnection(GlobalVariablesManager.G_Strconn))
{
affecgtRow = conn.Execute(sql, model);
}
return affecgtRow;
}
這裏mysql若是要切換爲Sql Server ,只要修改連接 MySqlConnection---》SqlConnection。
Dapper更多特性
一、支持動態dynamic綁定
1 var rows = connection.Query("select 1 A, 2 B union all select 3, 4"); 2 3 ((int)rows[0].A) 4 .IsEqualTo(1); 5 6 ((int)rows[0].B) 7 .IsEqualTo(2); 8 9 ((int)rows[1].A) 10 .IsEqualTo(3); 11 12 ((int)rows[1].B) 13 .IsEqualTo(4);
二、支持批量插入
三、支持多表關聯
四、支持多結果查詢
5 支持存儲過程
六、參數自動綁定
1 new {A = 1, B = "b"} // A will be mapped to the param @A, B to the param @B