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文件 ...
随机推荐
- gallery 从最左边开始显示并且默认选中第一个
import android.content.Context; import android.graphics.Camera; import android.graphics.Matrix; impo ...
- c 结构体struct
struct 定义初始化 #include<stdio.h> typedef struct stuInfo { ]; //姓名 int stuId; //学号 int age; //年龄 ...
- 关于ASP控件对象的一些简单操作
在线人数 Application.Lock(); Application[).ToString(); Application.UnLock(); Label1.Text = Application[& ...
- 服务器表导入到本地数据库SQL语句
这是开启权限 exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed ...
- radio与checkbox的选中事件
<一>判断checkbox的选中事件 var result=$(this).find("input[type='checkbox']").prop("chec ...
- Codeforces 116C - Party(dfs)
n个人,每个人之多有一个上司.“上司”关系具有传递性.求最少将人分成多少组,每组中的每个人的上司或者间接上司都不在该组.拿到题就用树的直径wa了一炮... 正解是有向无环森林的最长路.从每个跟节点df ...
- python初探-copy
python中,数据的拷贝有以下三种形式:赋值.浅copy和深copy.根据类型的不同,可以把数据分成以下两类:字符串和数字为一类,其他(包括列表.元祖.字典...)为一类. 在python中有池的概 ...
- [LeetCode]题解(python):115-Distinct Subsequences
题目来源: https://leetcode.com/problems/distinct-subsequences/ 题意分析: 给定字符串S和T,判断S中可以组成多少个T,T是S的子串. 题目思路: ...
- 从51跳新唐cortex-m0学习1——思想转变
Cortex-M0学习第一帖 序言:这里先说一下,大家在看帖子时候,可能看见字数比较多的,可能只是先大概浏览一下,之后从中挑几段大概瞅瞅,但是我要说,如果你碰到一个适合的帖子,请仔细品读,这是我在论坛 ...
- php浮点数计算比较及取整不准确解决方法
原文:php浮点数计算比较及取整不准确解决方法 php有意思的现象,应该是很多编程语言都会有这样的现象.这个是因为计算机的本身对浮点数识别的问题..... $f = 0.58; var_dump(in ...