寫在前面 Dapper 是一款輕量級ORM架構。為解決網站訪問流量極高而產生的性能問題而構造,主要通過執行TSQL表達式而實現資料庫的CQRS。 如果在項目中遇到性能訪問問題,選擇Dapper作為ORM框架可能是明智之舉,當然也可以使用Entity Framework或NHibernate來處理大數 ...
寫在前面
Dapper 是一款輕量級ORM架構。為解決網站訪問流量極高而產生的性能問題而構造,主要通過執行TSQL表達式而實現資料庫的CQRS。
如果在項目中遇到性能訪問問題,選擇Dapper作為ORM框架可能是明智之舉,當然也可以使用Entity Framework或NHibernate來處理大數據訪問及關係映射。
為什麼選擇Dapper
1.輕量:只有一個文件夾(SqlMapper.cs),編譯完成之後只有140K。
2.速度快:Dapper的速度接近於IDataReader,取列表的數據超過了DataTable。是公認速度第二快的小型ORM框架。
3.支持多種資料庫:Dapper可以在所有Ado.Net Providers下工作,包括sqlLite、Oracle、MySQL、SQL Server。
4.可以映射一對一、一對多、多對多等各種關係。
5.性能高:通過Emit反射IDataReader的序列隊列,來快速的得到和產生對象,性能不錯。
在項目中安裝Dapper
說了再多Dapper 如何好,如何快。都不如實踐一番。接下來我們在項目中安裝並使用Dapper。
第一步:打開 vs 2013 ,文件-->新建-->項目
然後,選擇空的mvc模板。點擊確定,創建一個mvc的項目。
第二步:工具-->nuGut程式包管理器-->程式包管理器控制台
第三步:輸入 install-package Dapper, 回車。
額~發現在安裝的過程中報錯。錯誤如下:
分析錯誤原因是因為我們在安裝Dapper的時候沒有給指定的版本號,在安裝的過程中會預設安裝最新版本的Dapper。
所以,我們要降低Dapper 的版本號 可以在 程式包管理器控制台 install-package Dapper 命令後面加上版本號。
例如: PM> Install-Package Dapper -Version 1.50.2 回車即可。
在項目中使用Dapper
第1步:打開sqlserver2012資料庫創建 DomeDb資料庫,然後創建 用戶表(sys_user)並插入基礎數據。
//創建用戶表
create table [sys_user]
(
[user_id] [uniqueidentifier] primary key default(newid()) not null,
[u_id] [nvarchar](20) null,
[u_password] [nchar](50) null,
[gender] [nchar](1) null,
[user_name] [nvarchar](50) null,
[creation_time] [datetime] default(getdate()) null,
[status] [nvarchar](1) null,
)
//插入測試數據
insert into [sys_user]([u_id],[u_password],[gender],[user_name],[status]) values('Admin','admin','m','創建管理員','y')
insert into [sys_user]([u_id],[u_password],[gender],[user_name],[status]) values('User','user','w','用戶','y')
insert into [sys_user]([u_id],[u_password],[gender],[user_name],[status]) values('ZhangSan','zhangsan001','m','張三','y')
insert into [sys_user]([u_id],[u_password],[gender],[user_name],[status]) values('LiSi','LiSi001','m','李思','n')
//查詢結果
select * from [sys_user]
結果如圖:
第2步:打開Web.config 。編寫連接字元串。
<connectionStrings>
<add name="lc" connectionString="server=.;uid=sa;pwd=123456;database=DemoDb;" providerName="System.Data.SqlClient" />
</connectionStrings>
第3步:新建空的控制器,命名HomeController。
聲明靜態的連接字元串,用來連接資料庫。
private static string connstr_sqlserver = ConfigurationManager.ConnectionStrings["lc"].ToString();
第4步:在Model文件夾添加sys_user_sqlserver類。
public class sys_user_sqlserver
{
[DisplayName("用戶主鍵")]
public Guid user_id { get; set; }
[DisplayName("登錄名稱")]
public string u_id { get; set; }
[DisplayName("登錄密碼")]
public string u_password { get; set; }
[DisplayName("性別")]
public string gender { get; set; }
[DisplayName("姓名")]
public string user_name { get; set; }
[DisplayName("創建時間")]
public string creation_time { get; set; }
[DisplayName("狀態")]
public string status { get; set; }
}
第5步:編輯獲取數據方法,結果返回Json對象。
[HttpGet]
public JsonResult Get_User_Sqlserver()
{
//1.使用IDbConnection打開連接
using (IDbConnection conn = new SqlConnection(connstr_sqlserver))
{
//2.查詢sql
string sql_all = @"select * from [dbo].[sys_user]";
//3.這裡可以有兩種方式
//方式1:
List<sys_user_sqlserver> u = conn.Query<sys_user_sqlserver>(sql_all).ToList();
//方式2:
//<sys_user> u = SqlMapper.Query<sys_user>(conn, sql_all).ToList();
//4.返回Json對象
return Json(u, JsonRequestBehavior.AllowGet);
}
}
第6步:前臺頁面發起Get請求。
$.get("../Sqlserver/Get_User_Sqlserver", function (msg) { });
顯示結果:
至此,我們從零開始完成了一個簡單的Dapper的查詢顯示的實踐例子。
在項目中使用Dapper 進行單表增刪改數據操作
1.新增數據
後臺
[HttpPost]
public int Add_User_SqlServer(sys_user_sqlserver sql_user)
{
int result = 0;
using (IDbConnection conn_sql = new SqlConnection(connstr_sqlserver))
{
string sql_add = @"insert into sys_user(user_id,u_id,u_password,gender,user_name,status)";
sql_add += " values (newid(),@u_id,@u_password,@gender,@user_name,@status)";
result = conn_sql.Execute(sql_add, sql_user);
}
return result;
}
前臺
var add_data = { u_id: "user1", u_password: "user1", gender: "w", user_name: "用戶1", status: "y" };
$.ajax({
url: "../Sqlserver/Add_User_SqlServer",
type: "post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(add_data)
}).done(function (msg) { }).fail(function (e) { });
顯示結果:
編輯前
編輯成功
成功返回1,失敗返回0
編輯後
2.根據主鍵查詢記錄
後臺:
[httpGet]
public JsonResult Query_User_SqlServer(string Id)
{
//1.連接Sqlserver 資料庫
using (IDbConnection conn_sql = new SqlConnection(connstr_sqlserver))
{
//2.sql查詢語句
string sql_query = @"select * from sys_user where user_id=@user_id";
//3.執行Dapper 中Query()方法查詢SingleOrDefault() 數據
sys_user_sqlserver users = conn_sql.Query<sys_user_sqlserver>(sql_query, new { @user_id = Id }).SingleOrDefault();
//4.返回Json對象結果集
return Json(users, JsonRequestBehavior.AllowGet);
}
}
前臺
$.get("../Sqlserver/Query_User_SqlServer", { id: "d8dae9bd-4664-4b1e-9f86-a4f77a2d316f" }, function (msg) { });
顯示結果:
3.編輯數據
後臺:
[HttpPost]
public int Edit_User_SqlServer(sys_user_sqlserver user)
{
//1.聲明返回結果
int result = 0;
//2.連接mysql資料庫
using (IDbConnection conn = new SqlConnection(connstr_sqlserver))
{
//3.編輯sql編輯語句
string sql_edit = @"update sys_user set u_id=@u_id,u_password=@u_password";
sql_edit += ",gender=@gender,user_name=@user_name,status=@status where user_id=@user_id";
//4.執行Dapper 里 Execute方法 實現編輯數據
result = conn.Execute(sql_edit, user);
}
//5.返回結果集
return result;
}
前臺
var edit_data = { u_id: "user1", u_password: "user1", gender: "m", user_name: "用戶1", status: "y", user_id: "d8dae9bd-4664-4b1e-9f86-a4f77a2d316f" };
$.ajax({
url: "../Sqlserver/Edit_User_SqlServer",
type: "post",
dataType: "json",
contentType: "application/json",
data: JSON.stringify(edit_data)
}).done(function (msg) { }).fail(function (e) { });
顯示結果:
編輯前
編譯成功
編譯後
3.刪除數據
後臺:
[HttpGet]
public int Del_User_Sqlserver(string Id)
{
//1.聲明返回的結果
int result = 0;
//2.連接Mysql資料庫
using (IDbConnection conn_sql = new SqlConnection(connstr_sqlserver))
{
//3.編輯刪除sql語句
string sql_del = @"delete from sys_user where user_id=@user_id";
//4.執行Dapper 中 Execute 方法,實現刪除數據操作
result = conn_sql.Execute(sql_del, new { @user_id = Id });
}
//5.返回執行結果
return result;
}
前臺
$.get("../Sqlserver/Del_User_Sqlserver", { id: "E90915F7-5724-4735-8474-FD1E226B90D2" }, function (msg) { });
顯示結果:
編輯前
編輯成功
刪除成功返回1,刪除失敗返回0。
編輯後
總結
至此,學習並實踐了使用Dapper對單表進行基本的數據操作。希望,能對自己同時也對你們有所收穫。
好記性不如‘爛筆頭’。