欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net Dapper 学习与实践系列(1) ---学习使用Dapper

程序员文章站 2022-08-28 14:53:56
写在前面 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 ,文件-->新建-->项目

.net Dapper 学习与实践系列(1) ---学习使用Dapper

然后,选择空的mvc模板。点击确定,创建一个mvc的项目。

.net Dapper 学习与实践系列(1) ---学习使用Dapper

第二步:工具-->nugut程序包管理器-->程序包管理器控制台
.net Dapper 学习与实践系列(1) ---学习使用Dapper

第三步:输入 install-package dapper, 回车。
.net Dapper 学习与实践系列(1) ---学习使用Dapper

额~发现在安装的过程中报错。错误如下:
.net Dapper 学习与实践系列(1) ---学习使用Dapper

分析错误原因是因为我们在安装dapper的时候没有给指定的版本号,在安装的过程中会默认安装最新版本的dapper。
所以,我们要降低dapper 的版本号 可以在 程序包管理器控制台 install-package dapper 命令后面加上版本号。

例如: pm> install-package dapper -version 1.50.2 回车即可。
.net Dapper 学习与实践系列(1) ---学习使用Dapper

在项目中使用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]

结果如图:
.net Dapper 学习与实践系列(1) ---学习使用Dapper

第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) { });

显示结果:
.net Dapper 学习与实践系列(1) ---学习使用Dapper

至此,我们从零开始完成了一个简单的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) { });

显示结果:
编辑前
.net Dapper 学习与实践系列(1) ---学习使用Dapper
编辑成功
成功返回1,失败返回0
.net Dapper 学习与实践系列(1) ---学习使用Dapper
编辑后
.net Dapper 学习与实践系列(1) ---学习使用Dapper

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) { });

显示结果:
.net Dapper 学习与实践系列(1) ---学习使用Dapper

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) { });

显示结果:
编辑前
.net Dapper 学习与实践系列(1) ---学习使用Dapper
编译成功
.net Dapper 学习与实践系列(1) ---学习使用Dapper
编译后
.net Dapper 学习与实践系列(1) ---学习使用Dapper

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) { });

显示结果:
编辑前
.net Dapper 学习与实践系列(1) ---学习使用Dapper

编辑成功
删除成功返回1,删除失败返回0。
.net Dapper 学习与实践系列(1) ---学习使用Dapper

编辑后
.net Dapper 学习与实践系列(1) ---学习使用Dapper

总结

至此,学习并实践了使用dapper对单表进行基本的数据操作。希望,能对自己同时也对你们有所收获。
好记性不如‘烂笔头’。