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文件 ...
随机推荐
- UVA122-Trees on the level(链二叉树)
Trees on the level Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Sub ...
- 如何打开Nib文件
作者:ani_di 版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di # 如何打开Nib文件 有段时间没有灌水,今天分享一个小技巧. nib文件是Cocoa Ap ...
- Flex和Servlet结合上传文件报错(二)
1.详细报错例如以下 一个表单域 不是一个表单域 java.io.FileNotFoundException: D:\MyEclipse\workspace\FlexFileUpload\Web\up ...
- 学习pthreads,给线程传递多个參数
上篇博文中.boss线程给其它线程传递的仅仅有一个參数,那么假如是多个參数呢?怎么传递呢?也许你会有这种疑问,带着这个疑问,我们进入本文的世界,这里传递多个參数,採用结构体,为什么呢?由于结构体里能够 ...
- g711u与g729比較编码格式
•711a-编解码格式为G.711 alaw •g711u-编解码格式为G.711 ulaw (the default) •g729-编解码格式为G.729 •g729a-编解码格式为G.729a 上 ...
- javascript操作JSON字符
1.先要区分JSON字符串和JSON对象 JSON字符串: Var strJSON = “{“Area”:[{“AreaId”:”123”},{“AreaId”:”345”}]}”, 或者 Var ...
- superMap Object 属性查看的一点代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- ftp读取txt数据并插入数据库
去官网下载http://enterprisedt.com/ .netftp组件 目前最新版本为2.2.3,下载后在bin目录中找到edtFTPnet.dll,在项目中添加引用. using Enter ...
- USB数据流模型
USB数据流模型 <<USB Specification11>> << USB Specification20>> << Linux Dev ...
- hdu 1251 统计难题(trie 树的简单应用)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意:给你多个字符串,求以某个字符串为前缀的字符串数量. 思路:简单的trie数应用,在trie ...