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文件 ...
随机推荐
- 多线程中Local Store Slot(本地存储槽)
在Java中有一种ThreadLocal机制,为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突.从线程的角度看,就好像每一个线程都完全 ...
- The Linux device model
/sys和 /dev的疑问 1./dev 下放的是设备文件,是由应用层mknod创建的文件.假设底层驱动对mknod的设备号有相应的驱动,如open等函数.那么应用层open "/dev/* ...
- Assertion failure in -[UIView layoutSublayersOfLayer:]
Assertion failure in -[UIView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2935.137/UIView.m:8 ...
- Spring注解与Spring与Struts2整合
@Component @Controller @Service @Repository 四大注解作用基本一样,只是表象在不同层面 @Resource @Scope Struts2与Spring整合:1 ...
- BZOJ 1996: [Hnoi2010]chorus 合唱队(dp)
简单的dp题..不能更水了.. --------------------------------------------------------------- #include<cstdio&g ...
- BZOJ 2662: [BeiJing wc2012]冻结(最短路)
这道题和 BZOJ 2763飞行路线 几乎一模一样..然后飞行路线我是1A,这道题WA了4次,我开始怀疑我的智商了.. ---------------------------------------- ...
- What I Have Lived For(我为什么而活着-罗素)
What I Have Lived For by Bertrand Russell Three passions, simple but overwhelmingly strong, have gov ...
- 嵌入式linux的网络编程(1)--TCP/IP协议概述
嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...
- Python BeautifulSoup中文乱码问题的2种解决方法
解决方法一: 使用python的BeautifulSoup来抓取网页然后输出网页标题,但是输出的总是乱码,找了好久找到解决办法,下面分享给大家首先是代码 from bs4 import Beautif ...
- 上架app被拒原因总结
1. Terms and conditions(法律与条款) 1.1 As a developer of applications for the App Store you are bound by ...