Dapper相关了解
公司新项目用的是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查询,并将结果映射到动态列表。
示例 - 强类型查询
示例 - 一对一映射
将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相关了解的更多相关文章
- 为EasySharding.EFCore提供Dapper相关查询扩展
承接上一篇博文中的中间件基本都是写入性的操作,但对于查询操作实际上是比较鸡肋的,如果单纯的查询,没有分表的情况下基本还能适应,这里为了Dapper提供了扩展 Dapper的扩展查询是需要写表名称的,所 ...
- 我的基于asp.net mvc5 +mysql+dapper+easyui 的Web开发框架(1)数据库访问(0)
一.数据库访问 概述 1. 数据库使用mysql,orm采用dapper框架.dapper框架应用简单,只是需要自己手写sql语句,但是对于像我这样写了多年sql语句的人来说,这应该不算问题,个人还是 ...
- 分布式追踪系统dapper
http://www.cnblogs.com/LBSer/p/3390852.html 最近单位需要做自己的分布式监控系统,因此看了一些资料,其中就有google的分布式追踪系统dapper的论文:h ...
- Dapper,大规模分布式系统的跟踪系统--转
原文地址:http://bigbully.github.io/Dapper-translation/ 概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模 ...
- Dapper,大规模分布式系统的跟踪系统
概述 当代的互联网的服务,通常都是用复杂的.大规模分布式集群来实现的.互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发.可能使用不同的编程语言来实现.有可能布在了几千台服务器 ...
- .NETCore Sqlserver下对Dapper的扩展支持
这里我们自定义一个IServiceCollection的扩展,例如下面我的扩展 services.AddDapperContext(dapperoptions => { dapperoption ...
- 【ORM】关于Dapper的一些常见用法
引言 Dapper是.Net平台下一款小巧玲珑的开源Orm框架,简单实用的同时保持高性能,非常适合我这种喜欢手写SQL的人使用,下面介绍一下如何使用Dapper. 相关资料 Dapper的GitHub ...
- 《Dapper》
最近看了google的分布式追踪系统dapper的论文:http://static.googleusercontent.com/external_content/untrusted_dlcp/rese ...
- 42岁大龄程序员的迷茫,看我最新尝鲜.net 5+Dapper搭建的WebAPI框架
42岁大龄程序员的迷茫 我真傻,真的.我单知道雪天是野兽在深山里没有食吃,会到村里来;我不知道春天也会有-- 我真傻,真的.我单知道程序员要活到老学到老,年龄大了要失业;我不知道码农(新型农民工)也会 ...
随机推荐
- 从XML文件乱码问题,探寻其背后的原理 (ZHUAN)
出现应用程序读取XML文件乱码的场景: 加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的:如果 ...
- JDK7和JDK8新特性
参考:http://www.cnblogs.com/langtianya/p/3757993.html JDK 1.7 新特性 1,switch中可以使用字串了 String s = "te ...
- mysql高可用集群——MHA架构
目录1.下载2.搭建mha 2.1 系统配置 2.2 架构 2.3 添加ssh公钥信任 2.4 安装mha节点 2.5 manager配置文件 2.6 检查 2.7 启动manager进程 2.8 碰 ...
- 使用Asset Pipeline管理rails生产环境静态资源实现步骤
1. 修改项目中指向静态资源文件的链接 a) 访问静态资源文件 <%= stylesheet_link_tag "application", media: &q ...
- 简单叙述一下MYSQL的优化
一个面试题.每次没能完全答对.各位补充一下.或者发表自己的答案:cry: 现在大概列出如下:(忘各位补充)1.数据库的设计尽量把数据库设计的更小的占磁盘空间.1).尽可能使用更小的整数类型.(medi ...
- Spring-@value用法详解
为了简化读取properties文件中的配置值,spring支持@value注解的方式来获取,这种方式大大简化了项目配置,提高业务中的灵活性. 一.两种使用方法 1.@Value("#{co ...
- Cookies和Session的定义与区别
Cookies和Session二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都纪录下来.当下次你再光临同一个网 ...
- 认识RESTFul
背景1. 概念提出者:Fielding2. 全写:Representational State Transfer,(资源的)表现层状态转化?3. http://www.ruanyifeng.com/b ...
- 【总结整理】dojo学习
Dojo Toolkit 的特性可以分到 4 个不同部分.这种划分使得开发人员可以将库大小保持到最小,确保应用程序性能不受大量 JavaScript 库下载的影响.例如,如果您只需要 Ajax 支持性 ...
- C++数组对象和构造函数
定义数组对象以后,对数组中的对象初始化的方式分为两种: 一种方式是在定义的时候用列表初始化 A a[5] = {A(1),A(2),A(3),A(4),A(5)}; 一种方式是在定义了数组对象以后,再 ...