公司新项目用的是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. LoadRunner常见错误代码解决方案

    一.LoadRunner26377错误 通常不是长度的问题,如果长度有问题就都出错了.应该是服务器返回的数据问题,导致没有找到这个参数. 26377错误的成因很多,总结最直接的结果就是No match ...

  2. 9.Selenium+HTMLTestRunner无法生成测试报告(Pycharm)

    1.若编辑器为Pycharm,代码无任何错误,且运行成功,但是无法生成测试报告,原因如下:(本质是编辑器原因) 若光标在如图位置,右键显示为“run 'unittest in XX'”,若是显示这种, ...

  3. Angular5学习笔记 - 创建组件(四)

    一.创建组件 ng generate component component-name #简写 ng g c component-name ng generate directive|pipe|ser ...

  4. linux中普通用户修改密码出现(passwd:Authentication token manipulation error)

    如果在linux中,不管是root用户还是普通用户登录后,修改自己的密码,出现---passwd:Authentication token manipulation error---错误的解决办法: ...

  5. gcc和g++使用澄清

    一:gcc与g++比较 编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而 c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确, ...

  6. Log4j配置记录(特定java包/类的日志级别控制)

    最近使用log4j,关于日志级别的如何配置生效百思不得其解,花了些时间,误打误撞终于整了,记录一下,备忘. 注意: 1.图中的2(log4j.logger.com.taobao)限制级别最高,它直接指 ...

  7. windows下socket编程:区分shutdown()及closesocket()

    以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...

  8. 下拉列表---demo---bai

    select.jsp <%@ page language="java" import="java.util.*" pageEncoding="U ...

  9. PhoneGap打Android包报错

    1.下载AndroidSDK,安装 2.下载Phonegap,解压,为以后打包用 3.下载Node.js,安装 4.下载并安装Ant工具 5.配置环境变量 ANT_HOME=ANT主目录路径 PATH ...

  10. NSURLConnection基本用法(苹果原生)

    一.NSURLConnection的常用类 (1)NSURL:请求地址 (2)NSURLRequest/NSMutableURLRequest:封装一个请求,保存发给服务器的全部数据,包括一个NSUR ...