Dapper是一款轻量级ORM工具(Github),Dapper语法十分简单。并且无须迁就数据库的设计,今天通过本文给大家介绍C# Dapper的使用,感兴趣的朋友一起看看吧
一、什么是Dapper
Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。
二、Dapper的优点
- 轻量。只有一个文件SqlMapper.cs,编译后就40K的一个很小的Dll.
 - 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
 - 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
 - 可以映射一对一,一对多,多对多等多种关系。
 - 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
 - 支持FrameWork2.0,3.0,3.5,4.0,4.5
 - Dapper语法十分简单。并且无须迁就数据库的设计。
 
三、使用方法
1、添加NuGet程序包Dapper
  
2、配置文件添加连接数据库的字符串
<?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执行语句.</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执行语句.</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执行语句.</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执行语句.</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执行语句.</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执行语句.</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执行语句.</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>
        /// 查询指定数据.
        /// </summary>
        /// <typeparam name="T">实体类型.</typeparam>
        /// <param name="sql">传入sql执行语句.</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执行语句.</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执行语句.</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。表数据自己添加
 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、调用方法
//-----------------------------------------------------------------------
// <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();
            // --------------查询指定数据--------------
            // 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
后续会陆续更新其他资料,喜欢请关注哦!
我的博客:https://www.cnblogs.com/duhaoran
到此这篇关于C# Dapper的使用的文章就介绍到这了,更多相关C#使用Dapper内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!
本文标题为:C#中Dapper的使用教程
				
        
 
            
        - 如何使用C# 捕获进程输出 2023-03-10
 - Oracle中for循环的使用方法 2023-07-04
 - Unity3D实现渐变颜色效果 2023-01-16
 - 在C# 8中如何使用默认接口方法详解 2023-03-29
 - Unity Shader实现模糊效果 2023-04-27
 - c# 模拟线性回归的示例 2023-03-14
 - WPF使用DrawingContext实现绘制刻度条 2023-07-04
 - .NET CORE DI 依赖注入 2023-09-27
 - user32.dll 函数说明小结 2022-12-26
 - C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
 
						
						
						
						
						
				
				
				
				