.net Dapper 學習系列(1) ---Dapper入門


寫在前面


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對單表進行基本的數據操作。希望,能對自己同時也對你們有所收獲。
好記性不如‘爛筆頭’。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM