C#中Dapper的使用教程
一、什么是Dapper
Dapper是一款輕量級ORM工具(Github)。如果你在小的項目中,使用Entity Framework、NHibernate 來處理大數(shù)據(jù)訪問及關(guān)系映射,未免有點殺雞用牛刀。你又覺得ORM省時省力,這時Dapper 將是你不二的選擇。
二、Dapper的優(yōu)點
- 輕量。只有一個文件SqlMapper.cs,編譯后就40K的一個很小的Dll.
- 速度快。Dapper的速度接近與IDataReader,取列表的數(shù)據(jù)超過了DataTable。
- 支持多種數(shù)據(jù)庫。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
- 可以映射一對一,一對多,多對多等多種關(guān)系。
- 性能高。通過Emit反射IDataReader的序列隊列,來快速的得到和產(chǎn)生對象,性能不錯。
- 支持FrameWork2.0,3.0,3.5,4.0,4.5
- Dapper語法十分簡單。并且無須遷就數(shù)據(jù)庫的設(shè)計。
三、使用方法
1、添加NuGet程序包Dapper

2、配置文件添加連接數(shù)據(jù)庫的字符串
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
<connectionStrings>
<add name="MyStrConn" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=DHR_DB;Integrated Security=True" />
</connectionStrings>
</configuration>
3、添加DapperTools.cs(添加、批量添加、刪除、批量刪除、修改、批量修改、查詢、查詢in的操作、多語句操作)
// <copyright file="DapperTools.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
namespace CSharpStudy
{
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
internal class DapperTools
{
public static string ConnectionString = ConfigurationManager.ConnectionStrings["MyStrConn"].ConnectionString;
/// <summary>
/// 添加.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <param name="t">傳入實體類型.</param>
/// <returns>int.</returns>
public static int Add<T>(string sql, T t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 批量添加.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <param name="t">傳入泛型類.</param>
/// <returns>int.</returns>
public static int Add<T>(string sql, List<T> t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 刪除.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <param name="t">傳入實體類型.</param>
/// <returns>int.</returns>
public static int Delete<T>(string sql, T t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 批量刪除.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <param name="t">傳入泛型類.</param>
/// <returns>int.</returns>
public static int Delete<T>(string sql, List<T> t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 修改.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <param name="t">傳入實體類型.</param>
/// <returns>int.</returns>
public static int Update<T>(string sql, T t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 批量修改.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <param name="t">傳入泛型類.</param>
/// <returns>int.</returns>
public static int Update<T>(string sql, List<T> t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Execute(sql, t);
}
}
/// <summary>
/// 查詢.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <returns>泛型類.</returns>
public static List<T> Query<T>(string sql)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Query<T>(sql).ToList();
}
}
/// <summary>
/// 查詢指定數(shù)據(jù).
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <param name="t">傳入泛型類.</param>
/// <returns>類.</returns>
public static T Query<T>(string sql, T t)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Query<T>(sql, t).SingleOrDefault();
}
}
/// <summary>
/// 查詢的in操作.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
/// <returns>泛型類.</returns>
public static List<T> Query<T>(string sql, int[] ids)
where T : class
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
return connection.Query<T>(sql, new { ids }).ToList();
}
}
/// <summary>
/// 多語句操作.
/// </summary>
/// <typeparam name="T">實體類型.</typeparam>
/// <param name="sql">傳入sql執(zhí)行語句.</param>
public static void QueryMultiple(string sql)
{
using (IDbConnection connection = new SqlConnection(ConnectionString))
{
var multiReader = connection.QueryMultiple(sql);
var userInfo = multiReader.Read<UserInfo>();
var student = multiReader.Read<Student>();
multiReader.Dispose();
}
}
}
}
4、添加測試類Student.cs、UserInfo。表數(shù)據(jù)自己添加
public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Memo { get; set; }
public DateTime CreateTime { get; set; }
public DateTime UpdateTime { get; set; }
}
public class UserInfo
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Memo { get; set; }
public DateTime CreateTime { get; set; }
public DateTime UpdateTime { get; set; }
}
5、調(diào)用方法
//-----------------------------------------------------------------------
// <copyright file="Program.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
// <author>John Doe</author>
//-----------------------------------------------------------------------
namespace CSharpStudy
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
internal class Program
{
private static void Main(string[] args)
{
// --------------添加--------------
// UserInfo user = new UserInfo();
// user.Name = "九九";
// user.Age = 10;
// user.Memo = "這是備注";
// user.CreateTime = DateTime.Now;
// string sql = "Insert into UserInfo(Name,Age,Memo,CreateTime) values (@name, @Age, @Memo,@CreateTime)";
// int result = DapperTools.Add<UserInfo>(sql, user);
// if (result > 0)
// {
// Console.WriteLine("添加成功");
// Console.ReadKey();
// }
// --------------批量添加--------------
// UserInfo user = new UserInfo();
// user.Name = "李奎";
// user.Age = 50;
// user.Memo = "這是備注";
// user.CreateTime = DateTime.Now;
// UserInfo user2 = new UserInfo();
// user2.Name = "梁山伯";
// user2.Age = 54;
// user2.Memo = "這是備注";
// user2.CreateTime = DateTime.Now;
// List<UserInfo> list = new List<UserInfo>();
// list.Add(user);
// list.Add(user2);
// string sql = "Insert into UserInfo(Name,Age,Memo,CreateTime) values (@name, @Age, @Memo,@CreateTime)";
// int result = DapperTools.Add<UserInfo>(sql, list);
// if (result > 0)
// {
// Console.WriteLine("添加成功");
// Console.ReadKey();
// }
// --------------刪除--------------
// UserInfo user = new UserInfo();
// user.Id = 18;
// string sql = "delete from UserInfo where Id=@Id";
// int result = DapperTools.Delete<UserInfo>(sql, user);
// if (result > 0)
// {
// Console.WriteLine("刪除成功");
// Console.ReadKey();
// }
// --------------批量刪除--------------
// UserInfo user = new UserInfo();
// user.Id = 15;
// UserInfo user2 = new UserInfo();
// user2.Id = 16;
// List<UserInfo> list = new List<UserInfo>();
// list.Add(user);
// list.Add(user2);
// string sql = "delete from UserInfo where Id=@Id";
// int result = DapperTools.Delete<UserInfo>(sql, list);
// if (result > 0)
// {
// Console.WriteLine("添加成功");
// Console.ReadKey();
// }
// --------------修改--------------
// UserInfo user = new UserInfo();
// user.Id = 14;
// user.Name = "九九";
// string sql = "update UserInfo set Name=@Name,UpdateTime=GETDATE() where Id=@ID";
// int result = DapperTools.Update<UserInfo>(sql, user);
// if (result > 0)
// {
// Console.WriteLine("修改成功");
// Console.ReadKey();
// }
// --------------批量修改--------------
// UserInfo user = new UserInfo();
// user.Id = 13;
// user.Name = "王文";
// UserInfo user2 = new UserInfo();
// user2.Id = 14;
// user2.Name = "冰冰";
// List<UserInfo> list = new List<UserInfo>();
// list.Add(user);
// list.Add(user2);
// string sql = "update UserInfo set Name=@Name,UpdateTime=GETDATE() where Id=@ID";
// int result = DapperTools.Update<UserInfo>(sql, list);
// if (result > 0)
// {
// Console.WriteLine("修改成功");
// Console.ReadKey();
// }
// --------------查詢--------------
// string sql = "select * from UserInfo";
// List<UserInfo> list = DapperTools.Query<UserInfo>(sql);
// foreach (var item in list)
// {
// Console.WriteLine(item.Id + "-" + item.Name + "-" + item.Age + "-" + item.Memo);
// }
// Console.ReadKey();
// --------------查詢指定數(shù)據(jù)--------------
// UserInfo user = new UserInfo();
// user.Id = 14;
// string sql = "select * from UserInfo where Id=@Id";
// UserInfo userInfo = DapperTools.Query<UserInfo>(sql, user);
// Console.WriteLine(userInfo.Id + "-" + userInfo.Name + "-" + userInfo.Age + "-" + userInfo.Memo);
// Console.ReadKey();
// --------------查詢的in操作--------------
// string sql = "select * from UserInfo where Id in @ids";
// int[] ids = { 1, 2 };
// List<UserInfo> list = DapperTools.Query<UserInfo>(sql, ids);
// foreach (var item in list)
// {
// Console.WriteLine(item.Id + "-" + item.Name + "-" + item.Age + "-" + item.Memo);
// }
// --------------多語句操作--------------
// string sql = "select * from userinfo;select * from student";
// DapperTools.QueryMultiple(sql);
}
}
}
源代碼:
鏈接: https://pan.baidu.com/s/1IM3diCqJCoSpvr11H6zddQ
提取碼: 6ag9
后續(xù)會陸續(xù)更新其他資料,喜歡請關(guān)注哦!
我的博客:https://www.cnblogs.com/duhaoran
到此這篇關(guān)于C# Dapper的使用的文章就介紹到這了,更多相關(guān)C#使用Dapper內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# OpenCvSharp利用白平衡技術(shù)實現(xiàn)圖像修復(fù)功能
這篇文章主要為大家詳細(xì)介紹了C# OpenCvSharp如何利用白平衡技術(shù)實現(xiàn)圖像修復(fù)功能,文中的示例代碼講解詳細(xì),希望對大家有一定的幫助2024-02-02
C#開發(fā)微信門戶及應(yīng)用(1) 微信接口使用
這篇文章主要為大家詳細(xì)介紹了C#開發(fā)微信門戶及應(yīng)用第一篇,微信接口的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06
C#中GridView動態(tài)添加列的實現(xiàn)方法
這篇文章主要介紹了C#中GridView動態(tài)添加列的實現(xiàn)方法,涉及C#中GridView的相關(guān)使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07
理解C#中參數(shù)的值和引用以及傳遞結(jié)構(gòu)和類引用的區(qū)別
這篇文章主要介紹了理解C#中參數(shù)的值和引用以及傳遞結(jié)構(gòu)和類引用的區(qū)別,文中舉了兩段代碼例子來簡單說明,需要的朋友可以參考下2016-01-01

