C#中Dapper的使用教程
一、什么是Dapper
Dapper是一款輕量級(jí)ORM工具(Github)。如果你在小的項(xiàng)目中,使用Entity Framework、NHibernate 來(lái)處理大數(shù)據(jù)訪問(wèn)及關(guān)系映射,未免有點(diǎn)殺雞用牛刀。你又覺(jué)得ORM省時(shí)省力,這時(shí)Dapper 將是你不二的選擇。
二、Dapper的優(yōu)點(diǎn)
- 輕量。只有一個(gè)文件SqlMapper.cs,編譯后就40K的一個(gè)很小的Dll.
- 速度快。Dapper的速度接近與IDataReader,取列表的數(shù)據(jù)超過(guò)了DataTable。
- 支持多種數(shù)據(jù)庫(kù)。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
- 可以映射一對(duì)一,一對(duì)多,多對(duì)多等多種關(guān)系。
- 性能高。通過(guò)Emit反射IDataReader的序列隊(duì)列,來(lái)快速的得到和產(chǎn)生對(duì)象,性能不錯(cuò)。
- 支持FrameWork2.0,3.0,3.5,4.0,4.5
- Dapper語(yǔ)法十分簡(jiǎn)單。并且無(wú)須遷就數(shù)據(jù)庫(kù)的設(shè)計(jì)。
三、使用方法
1、添加NuGet程序包Dapper
2、配置文件添加連接數(shù)據(jù)庫(kù)的字符串
<?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的操作、多語(yǔ)句操作)
// <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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <param name="t">傳入實(shí)體類(lèi)型.</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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <param name="t">傳入泛型類(lèi).</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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <param name="t">傳入實(shí)體類(lèi)型.</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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <param name="t">傳入泛型類(lèi).</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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <param name="t">傳入實(shí)體類(lèi)型.</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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <param name="t">傳入泛型類(lèi).</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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <returns>泛型類(lèi).</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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <param name="t">傳入泛型類(lèi).</param> /// <returns>類(lèi).</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">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</param> /// <returns>泛型類(lèi).</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> /// 多語(yǔ)句操作. /// </summary> /// <typeparam name="T">實(shí)體類(lèi)型.</typeparam> /// <param name="sql">傳入sql執(zhí)行語(yǔ)句.</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、添加測(cè)試類(lèi)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); // } // --------------多語(yǔ)句操作-------------- // string sql = "select * from userinfo;select * from student"; // DapperTools.QueryMultiple(sql); } } }
源代碼:
鏈接: https://pan.baidu.com/s/1IM3diCqJCoSpvr11H6zddQ
提取碼: 6ag9
后續(xù)會(huì)陸續(xù)更新其他資料,喜歡請(qǐng)關(guān)注哦!
我的博客:https://www.cnblogs.com/duhaoran
到此這篇關(guān)于C# Dapper的使用的文章就介紹到這了,更多相關(guān)C#使用Dapper內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- ORM框架之Dapper簡(jiǎn)介和性能測(cè)試
- 如何在C#中使用Dapper ORM
- 如何在Asp.Net Core中集成ABP Dapper
- 在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫(kù)
- .NET Core Dapper操作mysql數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法
- .net core2.0下使用Identity改用dapper存儲(chǔ)數(shù)據(jù)(實(shí)例講解)
- 基于Dapper實(shí)現(xiàn)分頁(yè)效果 支持篩選、排序、結(jié)果集總數(shù)等
- .Net?Core下使用Dapper的方法
相關(guān)文章
unity實(shí)現(xiàn)鼠標(biāo)跟隨(ITween)
這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)鼠標(biāo)跟隨,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04在WinForm中發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇在WinForm中發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06C#實(shí)現(xiàn)listview Group收縮擴(kuò)展的方法
這篇文章主要介紹了C#實(shí)現(xiàn)listview Group收縮擴(kuò)展的方法,結(jié)合實(shí)例形式分析了listview控件的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-03-03