公司新项目用的是Dapper,做的时候没有具体看dapper的具体用法,现在回来回顾总结一下。

1-总体介绍dapper

我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db。

Dapper是一个轻量级的ORM。之前最常用的ORM是EF,其实EF底层是Ado.net实现的。

现在基本上已经远离SqlHelper时代了。

Dapper支持多数据库。支持多数据库的本质是因为dapper是对IDBConnection接口进行了方法扩展。

SqlConnection,MysqlConnection,OracleConnection都是继承于DBConnection,而DBConnection实现了IDBConnection的接口

2-安装dapper

通过nuget包进行安装。或者登陆www.nuget.org  搜索dppaer

3.操作

引入 system.configuration  配置一下数据库链接字符串
 ps:推荐一个网站  https://www.connectionstrings.com 数据库配置网站

查询

Query

Query方法是一种扩展方法,可以从IDbConnection类型的任何对象种调用。它可以执行查询并映射结果

示例 - 查询匿名

可以使用Query方法执行原始SQL查询,并将结果映射到动态列表。

string sql = "select * from table1";
using( var db = new SqlConnection("Data  Source=TestDapper.sdf"))
{
   var info = db.query(sql);
}

示例 - 强类型查询

string sql = "select * from table1";
using( var db = new SqlConnection("Data  Source=TestDapper.sdf"))
{
   var info = db.query<Table1>(sql);
}
 

示例 - 一对一映射

将2张表的关系一对一的映射到强类型中

var  sql = "select * from table1 a INNER JOIN table2 b  on a.id=b.id";

var info = db.Query<Table1 , Table2 , Table1>(

sql,

(table1 , table2) =>

{

table1.column = table2;

return table1;

},
         splitOn:"column";

)

splitOn是分割字段

Query的扩展方法
1 QueryFirst
2 QueryFirstOrDefault
3 QuerySingle
4 QuerySingleOrDefault

QueryFirst | QueryFirstOrDefault | QuerySingle | QuerySingleOrDefault 对比

QueryFirst

匿名对象及强类型对象 
string sql  = "  select * from table1  where  Id = @id";
var info = db.QueryFirst(sql , new { id  = 1})

string sql  = "  select * from table1  where  Id = @id";
var info = db.QueryFirst<Table1>(sql , new { id  = 1})

QueryFirstOrDefault

执行查询并返回结果,若结果为空,则返回默认值,若返回多个结果,则默认结果,若是单个结果,则映射给匿名对象或强类型对象

string sql  = "  select * from table1  where  Id = @id";
var info = db.QueryFirstOrDefault<Table1>(sql , new { id  = 1})

QuerySingle

执行查询并返回结果,若结果为空或者返回多个结果,将抛出异常

string sql  = "  select * from table1  where  Id = @id";
var info = db.QuerySingle<Table1>(sql , new { id  = 1})

QuerySingleOrDefault

执行查询并返回结果,若结果为空或者返回多个结果,将抛出异常,反之映射给匿名对象或强类型对象

string sql  = "  select * from table1  where  Id = @id";
var info = db.QuerySingleOrDefault<Table1>(sql , new { id  = 1})

QueryMultiple

它可以在同一命令中执行多个查询并返回多个结果

string sql  = "  select * from table1  where  Id = @id ; select * from table2  where  Id = @id ; ";
var info =
db.QueryMultiple(sql  , new { id = 1})

var TableInfo1 = info.Read<Table1>();
var TableInfo2 = info.Read<Table2>();

Dapper允许您使用列表在IN子句上指定多个参数。

Dapper相关了解的更多相关文章

  1. 为EasySharding.EFCore提供Dapper相关查询扩展

    承接上一篇博文中的中间件基本都是写入性的操作,但对于查询操作实际上是比较鸡肋的,如果单纯的查询,没有分表的情况下基本还能适应,这里为了Dapper提供了扩展 Dapper的扩展查询是需要写表名称的,所 ...

  2. 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(1)数据库访问(0)

    一.数据库访问 概述 1. 数据库使用mysql,orm采用dapper框架.dapper框架应用简单,只是需要自己手写sql语句,但是对于像我这样写了多年sql语句的人来说,这应该不算问题,个人还是 ...

  3. 分布式追踪系统dapper

    http://www.cnblogs.com/LBSer/p/3390852.html 最近单位需要做自己的分布式监控系统,因此看了一些资料,其中就有google的分布式追踪系统dapper的论文:h ...

  4. Dapper,大规模分布式系统的跟踪系统--转

    原文地址:http://bigbully.github.io/Dapper-translation/ 概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模 ...

  5. Dapper,大规模分布式系统的跟踪系统

    概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器 ...

  6. .NETCore Sqlserver下对Dapper的扩展支持

    这里我们自定义一个IServiceCollection的扩展,例如下面我的扩展 services.AddDapperContext(dapperoptions => { dapperoption ...

  7. 【ORM】关于Dapper的一些常见用法

    引言 Dapper是.Net平台下一款小巧玲珑的开源Orm框架,简单实用的同时保持高性能,非常适合我这种喜欢手写SQL的人使用,下面介绍一下如何使用Dapper. 相关资料 Dapper的GitHub ...

  8. 《Dapper》

    最近看了google的分布式追踪系统dapper的论文:http://static.googleusercontent.com/external_content/untrusted_dlcp/rese ...

  9. 42岁大龄程序员的迷茫,看我最新尝鲜.net 5+Dapper搭建的WebAPI框架

    42岁大龄程序员的迷茫 我真傻,真的.我单知道雪天是野兽在深山里没有食吃,会到村里来;我不知道春天也会有-- 我真傻,真的.我单知道程序员要活到老学到老,年龄大了要失业;我不知道码农(新型农民工)也会 ...

随机推荐

  1. 五、Jmeter--关联(正则表达式)

    一.什么时候需要关联? 1. 服务器返回的动态变化而且对业务有影响的需要关联. 2. 回放脚本看是否正确,检查下脚本,是否有动态数据影响 3. 一大串字符串,每次请求参数是否有变化 4. 可以找开发问 ...

  2. java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结

    java.lang.Object ....|__java.util.Date ..........|__java.sql.Date/java.sql.Timestamp /java.sql.Time ...

  3. 遍历js的obj中所有属性得key

    var obj = $("#jstree_default").jstree("get_checked"); for (var a in obj) { alert ...

  4. 数据库:ubantu下MySQL安装指南

    http://wiki.ubuntu.org.cn/MySQL%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97 安装MySQL sudo apt-get install mys ...

  5. [Python]python CGI脚本在apache服务器上运行时出现“Premature end of script headers”错误

    在测试自己的python CGI脚本时, 当html网页中的表单form内容传送到服务器python脚本时, 总是出现Premature end of script headers错误, 网页显示是服 ...

  6. nginx for windows之负载均衡

    1.编辑c:\nginx\conf\nginx.conf   添加以下内容: #user  nobody;   #启动进程worker_processes  1;   #全局错误日志及PID文件err ...

  7. linux命令-分区表fstab

    磁盘分区后需要格式化,挂载之后才能使用 我们有开机后自动挂载的需求,方法有两种 1.配置文件的形式,把mount写到配置文件里去 cat /etc/fstab 2.把挂载命令写到一个文件里 ls /e ...

  8. css水平居中(一)

    第一种方法:使用text-align属性. 看到一篇博客,也不知道是不是我理解的问题,博客上说text-align可以是内联元素水平居中,我感觉这样的说法是不是有些不准确. text-align属性规 ...

  9. 我的第一个Socket程序-SuperSocket使用入门(一)

    第一次使用Socket,遇到过坑,也涨过姿势,网上关于SuperSocket的教程基本都停留在官方给的简单demo上,实际使用还是会碰到一些问题,所以准备写两篇博客,分别来介绍SuperSocket以 ...

  10. java如何从cmd运行并使用text文件作为输入源的总结

    大家好,好几天没写东西了,又和大家见面了 首先,编译我们的.java文件,生成.class文件 使用命令 javac yourname.java 编译 然后使用java youname < yo ...