Dapper 基础用法

摘要:
Dapper是下的一个简单orm框架。网它具有以下特点:1。它很简单,只需要一个文件。2.速度很快。以下是查询结果集在500以上的运行速度的比较。3.它不需要特定的dbprovider,即无论是sqlite、sqlce、firebird、oracle、MySQL还是SQL Server,都可以使用。下面是一个示例,介绍Dapper的基本用法。假设有一个数据库测试,它包含一个表用户来存储id、昵称、电子邮件和角色字段。

Dapper是.Net下的一个简单orm框架,具有以下特点:

1、简单,只需要一个文件即可(SqlMapper.cs)

2、快速,下面是一个查询结果集在500以上的运行速度对比

Dapper 基础用法第1张

3、不要求特定的db provider,即不论是sqlite, sqlce, firebird, oracle, MySQL 还是 SQL Server,都能使用它。

项目的github地址是:https://github.com/SamSaffron/dapper-dot-net 可以从这里下载SqlMapper.cs,然后添加到自己的项目中即可。

下面通过一个例子来介绍Dapper的基本用法。

假设有个数据库test,test包含一张表users用来存储id, nickname, email, role字段。

在vs中新建一个控制台项目,添加SqlMapper.cs到项目中,下面是program.cs的内容,注释中介绍了dapper的常用方法:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Data.SqlClient;
  5 using System.Linq;
  6 using System.Text;
  7 using Dapper;
  8 
  9 namespace DapperTest
 10 {
 11     class Program
 12     {
 13         public const string ConnectionString = "Data Source=.;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=test";
 14 
 15         public const string OleDbConnectionString = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=tempdb;Integrated Security=SSPI";
 16 
 17         public static SqlConnection GetOpenConnection()
 18         {
 19             var connection = new SqlConnection(ConnectionString);
 20             connection.Open();
 21             return connection;
 22         }
 23 
 24         static void Main(string[] args)
 25         {
 26             var connection = GetOpenConnection();
 27 
 28             //1、返回动态对象列表的查询
 29             Console.WriteLine("1、返回动态对象列表的查询");
 30             var users = connection.Query("select * from users");
 31             foreach (var user in users)
 32             {
 33                 //动态对象的名称与数据库字段的名称一模一样
 34                 Console.WriteLine(user.id+"	"+user.nickname+"	"+user.email);
 35             }
 36             Console.WriteLine(users.First().nickname);
 37 
 38             //2、返回强类型列表的查询
 39             Console.WriteLine("2、返回强类型列表的查询");
 40             var users2 = connection.Query<User>("select * from users");
 41             foreach (var user in users2)
 42             {
 43                 //注意强类型返回的是User类实例
 44                 Console.WriteLine(user.Id + "	" + user.NickName + "	" + user.Email);
 45             }
 46 
 47             //3、传递参数的查询
 48             Console.WriteLine("3、传递参数的查询");
 49             var users3 = connection.Query<User>("select * from users where email=@email",
 50                 new {email = "liulixiang1988@gmail.com"});
 51             foreach (var user in users3)
 52             {
 53                 //注意强类型返回的是User类实例
 54                 Console.WriteLine(user.Id + "	" + user.NickName + "	" + user.Email);
 55             }
 56 
 57             //4、执行不返回结果的命令(更新、删除等)
 58             Console.WriteLine("4、执行不返回结果的命令(更新、删除等)");
 59             connection.Execute(@"
 60               IF EXISTS(SELECT 1 FROM users WHERE nickname=@nickname)
 61                 RETURN;
 62               insert into users(nickname, email, role) values(@nickname, @email, @role);
 63             ", new {nickname = "王二", email = @"wanger@test.com", role = 0});
 64             var users4 = connection.Query<User>("select * from users");
 65             Console.WriteLine("执行不返回结果后的结果集合");
 66             foreach (var user in users4)
 67             {
 68                 //注意强类型返回的是User类实例
 69                 Console.WriteLine(user.Id + "	" + user.NickName + "	" + user.Email);
 70             }
 71 
 72             //5、插入或更新集合或者列表(多条记录)
 73             Console.WriteLine("5、插入或更新集合或者列表(多条记录)");
 74             var userList = new List<User>
 75             {
 76                 new User() {NickName = "李四", Email = "lisi@test.com", Role = 0},
 77                 new User() {NickName = "张三", Email = "zhangsan@test.com", Role = 0}
 78             };
 79             connection.Execute(@"
 80               IF EXISTS(SELECT 1 FROM users WHERE nickname=@nickname)
 81                 RETURN;
 82               insert into users(nickname, email, role) values(@nickname, @email, @role);
 83             ", userList);
 84             //执行查询
 85             var users5 = connection.Query<User>("select * from users");
 86             Console.WriteLine("执行不返回结果后的结果集合");
 87             foreach (var user in users5)
 88             {
 89                 //注意强类型返回的是User类实例
 90                 Console.WriteLine(user.Id + "	" + user.NickName + "	" + user.Email);
 91             }
 92             //6、dapper支持列表自动分解
 93             Console.WriteLine("6、dapper支持列表自动分解");
 94             var users6 = connection.Query<User>(
 95                 @"SELECT * FROM users
 96                 WHERE nickname IN @nicknames", new {nicknames=new string[]{"张三", "李四"}})
 97             ;
 98             foreach (var user in users6)
 99             {
100                 //注意强类型返回的是User类实例
101                 Console.WriteLine(user.Id + "	" + user.NickName + "	" + user.Email);
102             }
103 
104             //7、执行存储过程
105             Console.WriteLine("7、执行存储过程");
106             var users7 = connection.Query<User>("sp_get_user", new {nickname = "张三"},
107                 commandType: CommandType.StoredProcedure);
108             foreach (var user in users7)
109             {
110                 //注意强类型返回的是User类实例
111                 Console.WriteLine(user.Id + "	" + user.NickName + "	" + user.Email);
112             }
113             Console.ReadKey();
114             if(connection.State != ConnectionState.Closed)
115                 connection.Close();
116         }
117     }
118 
119     public class User
120     {
121         public int? Id { get; set; }
122         public string NickName { get; set; }
123         public string Email { get; set; }
124         public int? Role { get; set; }
125     }
126 }

免责声明:文章转载自《Dapper 基础用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇NSURLSession的基本使用git clone速度太慢下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用Java爬虫抓取网页中的email地址

问题 抓取网页中的email地址。示例网页地址 https://www.douban.com/group/topic/44274322/ 实现 思路 1、使用java.net.URL对象,绑定网络上某一个网页的地址 2、通过java.net.URL对象的openConnection()方法获得一个HttpConnection对象 3、通过HttpConne...

Dapper完美兼容Oracle,执行存储过程,并返回结果集。

Dapper完美兼容Oracle,执行存储过程,并返回结果集。 这个问题,困扰了我整整两天。 刚刚用到Dapper的时候,感觉非常牛掰。特别是配合.net 4.0新特性dynamic,让我生成泛型集合,再转json一气呵成。 不过,各种ORM总有让人吐槽的地方。。。 比如,我之前在SqlServer上写测试,搞封装,没有任何问题。CURD、批量操作、存储过...

thinkphp导出csv文件,用表格输出excel

1.thinkphp导出csv文件 导出csv文件可能就那几行代码,今天有个问题困扰我好久,就是导出之后出现一些html代码,这个不应该,view里面是空的,controller中最后也没有$this->display(),最后细心看到think_page_trace这样的字样,恍然大悟,是页面的跟踪日志,这个默认是会输出来的。最后在方法后面加了一个...

jQuery EasyUI教程之datagrid应用

一、利用jQuery EasyUI的DataGrid创建CRUD应用       对网页应用程序来说,正确采集和管理数据通常很有必要,DataGrid的CRUD功能允许我们创建页面来列表显示和编辑数据库记录。本教程将教会你如何运用jQuery EasyUI框架来实现DataGrid的CRUD功能 。 我们会用到如下插件: · datagrid: 列表显示数...

PartⅡ邮件钓鱼平台

Gophish官网地址:https://getgophish.com/ Gophish项目地址: https://github.com/gophish/gophish https://github.com/gophish/gophish/releases/ 安装过程 首先,我们将适合自己系统的Gophish包下载到我们的vps上: mkdir goph...

Oracle--约束

**约束条件:** FOREIGN KEY:在子表中定义一个级表约束 REFERENCES:指定表和父表中的列 ON DELETE CASCADE:当删除父表时,级联删除子表纪录 ON DELETE SET NULL:将子表的相关依赖纪录外键置为 null create table teacher ( sid number constraint...