Dapper 基础用法
Dapper是.Net下的一个简单orm框架,具有以下特点:
1、简单,只需要一个文件即可(SqlMapper.cs)
2、快速,下面是一个查询结果集在500以上的运行速度对比

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的常用方法:
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using Dapper; namespace DapperTest
{
class Program
{
public const string ConnectionString = "Data Source=.;Initial Catalog=test;Persist Security Info=True;User ID=sa;Password=test"; public const string OleDbConnectionString = "Provider=SQLOLEDB;Data Source=.;Initial Catalog=tempdb;Integrated Security=SSPI"; public static SqlConnection GetOpenConnection()
{
var connection = new SqlConnection(ConnectionString);
connection.Open();
return connection;
} static void Main(string[] args)
{
var connection = GetOpenConnection(); //1、返回动态对象列表的查询
Console.WriteLine("1、返回动态对象列表的查询");
var users = connection.Query("select * from users");
foreach (var user in users)
{
//动态对象的名称与数据库字段的名称一模一样
Console.WriteLine(user.id+"\t"+user.nickname+"\t"+user.email);
}
Console.WriteLine(users.First().nickname); //2、返回强类型列表的查询
Console.WriteLine("2、返回强类型列表的查询");
var users2 = connection.Query<User>("select * from users");
foreach (var user in users2)
{
//注意强类型返回的是User类实例
Console.WriteLine(user.Id + "\t" + user.NickName + "\t" + user.Email);
} //3、传递参数的查询
Console.WriteLine("3、传递参数的查询");
var users3 = connection.Query<User>("select * from users where email=@email",
new {email = "liulixiang1988@gmail.com"});
foreach (var user in users3)
{
//注意强类型返回的是User类实例
Console.WriteLine(user.Id + "\t" + user.NickName + "\t" + user.Email);
} //4、执行不返回结果的命令(更新、删除等)
Console.WriteLine("4、执行不返回结果的命令(更新、删除等)");
connection.Execute(@"
IF EXISTS(SELECT 1 FROM users WHERE nickname=@nickname)
RETURN;
insert into users(nickname, email, role) values(@nickname, @email, @role);
", new {nickname = "王二", email = @"wanger@test.com", role = });
var users4 = connection.Query<User>("select * from users");
Console.WriteLine("执行不返回结果后的结果集合");
foreach (var user in users4)
{
//注意强类型返回的是User类实例
Console.WriteLine(user.Id + "\t" + user.NickName + "\t" + user.Email);
} //5、插入或更新集合或者列表(多条记录)
Console.WriteLine("5、插入或更新集合或者列表(多条记录)");
var userList = new List<User>
{
new User() {NickName = "李四", Email = "lisi@test.com", Role = },
new User() {NickName = "张三", Email = "zhangsan@test.com", Role = }
};
connection.Execute(@"
IF EXISTS(SELECT 1 FROM users WHERE nickname=@nickname)
RETURN;
insert into users(nickname, email, role) values(@nickname, @email, @role);
", userList);
//执行查询
var users5 = connection.Query<User>("select * from users");
Console.WriteLine("执行不返回结果后的结果集合");
foreach (var user in users5)
{
//注意强类型返回的是User类实例
Console.WriteLine(user.Id + "\t" + user.NickName + "\t" + user.Email);
}
//6、dapper支持列表自动分解
Console.WriteLine("6、dapper支持列表自动分解");
var users6 = connection.Query<User>(
@"SELECT * FROM users
WHERE nickname IN @nicknames", new {nicknames=new string[]{"张三", "李四"}})
;
foreach (var user in users6)
{
//注意强类型返回的是User类实例
Console.WriteLine(user.Id + "\t" + user.NickName + "\t" + user.Email);
} //7、执行存储过程
Console.WriteLine("7、执行存储过程");
var users7 = connection.Query<User>("sp_get_user", new {nickname = "张三"},
commandType: CommandType.StoredProcedure);
foreach (var user in users7)
{
//注意强类型返回的是User类实例
Console.WriteLine(user.Id + "\t" + user.NickName + "\t" + user.Email);
}
Console.ReadKey();
if(connection.State != ConnectionState.Closed)
connection.Close();
}
} public class User
{
public int? Id { get; set; }
public string NickName { get; set; }
public string Email { get; set; }
public int? Role { get; set; }
}
}
Dapper 基础用法的更多相关文章
- Dapper基础用法
假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ROM.点击下载Dapper的优势:1,Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件,编译后 ...
- PropertyGrid控件由浅入深(二):基础用法
目录 PropertyGrid控件由浅入深(一):文章大纲 PropertyGrid控件由浅入深(二):基础用法 控件的外观构成 控件的外观构成如下图所示: PropertyGrid控件包含以下几个要 ...
- logstash安装与基础用法
若是搭建elk,建议先安装好elasticsearch 来自官网,版本为2.3 wget -c https://download.elastic.co/logstash/logstash/packag ...
- elasticsearch安装与基础用法
来自官网,版本为2.3 注意elasticsearch依赖jdk,2.3依赖jdk7 下载rpm包并安装 wget -c https://download.elastic.co/elasticsear ...
- BigDecimal最基础用法
BigDecimal最基础用法 用字符串生成的BigDecimal是不会丢精度的. 简单除法. public class DemoBigDecimal { public static void mai ...
- Vue组件基础用法
前面的话 组件(Component)是Vue.js最强大的功能之一.组件可以扩展HTML元素,封装可重用的代码.根据项目需求,抽象出一些组件,每个组件里包含了展现.功能和样式.每个页面,根据自己所需, ...
- Smarty基础用法
一.Smarty基础用法: 1.基础用法如下 include './smarty/Smarty.class.php';//引入smarty类 $smarty = new Smarty();//实例化s ...
- 前端自动化测试神器-Katalon的基础用法
前言 最近由于在工作中需要通过Web端的功能进行一次大批量的操作,数据量大概在5000左右,如果手动处理, 完成一条数据的操作用时在20秒左右的话,大概需要4-5个人/天的工作量(假设一天8小时的工作 ...
- Bootstrap fileinput:文件上传插件的基础用法
官网地址:http://plugins.krajee.com/ 官网提供的样例:http://plugins.krajee.com/file-input/demo 基础用法一 导入核心CSS及JS文件 ...
随机推荐
- 自己动手实现getElementsByClassName
看了一句话,我们都是搬运工,github的搬运工,下面这代码搬运来自各个地方,最后成型. var classCache = {}; function getElementsByClassName(cl ...
- 蓝桥杯之FBI树问题
问题描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- 优步uber司机怎么注册不了?注册优步司机问题要点
第一,可能是你的车型不符全要求,看是不是5年内的车型,同时要求车价8W以上:第二,你的驾驶年限不够,要求驾驶证年限1年以上的,如果不够的怎么办,告诉你个方法,PS啊!优步可查不了车管所的系统,所以这类 ...
- cocos2d-x Touch 事件应用的一个例子
1效果图: 这个是<Cocos2d-X by Example Beginner's Guide>上的第一个例子,我稍微重构了下代码.是一个简单的IPad上的双人游戏,把球射入对方的球门就得 ...
- WebRTC学习笔记_Demo收集
1. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中增加了webrtc源代码,放在/external/w ...
- 7kb的javascript日期操作类库(XDate)
A Modern JavaScript Date Library XDate is a thin wrapper around JavaScript's native Date object that ...
- AngularJs 简单入门
1.AngularJs 是什么以及应用程序组成的三部分 AngularJS是一个开发动态Web应用的框架.它让你可以使用HTML作为模板语言并且可以通过扩展的HTML语法来使应用组件更加清晰和简洁.它 ...
- ImageMagick 转换 progressive jpeg
什么是渐进式图片(Progressive JPEG)? 来自 张鑫旭-鑫空间-鑫生活 的解释: 不知诸位有没有注意到,这些jpg格式的图片在呈现的时候,有两种方式,一种是自上而下扫描式的,还有一种就是 ...
- PHP发送短信如何实现?
最近要用php发送和接收短信,用户订单要用短信通知一类的功能,网上看了好多短信平台感觉都不靠谱. 也测试了很多代码,下面把几款PHP发送短信好用的分享给大家: PHP发送短信方法一(比较好,推荐) / ...
- Oracle系统视图
VIEW TABLES 1.DBA_TABLES --查看系统里所有表的信息,只有DBA权限用户才可查看 SELECT * FROM DBA_TABLES WHERE OWNER='HR' AND T ...