C#中Dapper的使用教程

 更新时间:2021年07月01日 16:01:25   作者:奇然  
Dapper是一款轻量级ORM工具(Github),Dapper语法十分简单。并且无须迁就数据库的设计,今天通过本文给大家介绍C# Dapper的使用,感兴趣的朋友一起看看吧

一、什么是Dapper

  Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。

二、Dapper的优点

  1. 轻量。只有一个文件SqlMapper.cs,编译后就40K的一个很小的Dll.
  2. 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
  3. 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
  4. 可以映射一对一,一对多,多对多等多种关系。
  5. 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
  6. 支持FrameWork2.0,3.0,3.5,4.0,4.5
  7. 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# OpenCvSharp利用白平衡技术实现图像修复功能

    C# OpenCvSharp利用白平衡技术实现图像修复功能

    这篇文章主要为大家详细介绍了C# OpenCvSharp如何利用白平衡技术实现图像修复功能,文中的示例代码讲解详细,希望对大家有一定的帮助
    2024-02-02
  • C#程序中类数量对程序启动的影响详解

    C#程序中类数量对程序启动的影响详解

    这篇文章主要给大家介绍了关于C#程序中类数量对程序启动的影响的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • C#开发微信门户及应用(1) 微信接口使用

    C#开发微信门户及应用(1) 微信接口使用

    这篇文章主要为大家详细介绍了C#开发微信门户及应用第一篇,微信接口的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • C#实现较为实用的SQLhelper

    C#实现较为实用的SQLhelper

    这篇文章主要为大家详细介绍了C#实现较为实用SQLhelper的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • C# 修改文件的创建、修改和访问时间的示例

    C# 修改文件的创建、修改和访问时间的示例

    这篇文章主要介绍了C#实现修改文件的创建、修改和访问时间的示例,帮助大家更好的理解和学习使用c#,感兴趣的朋友可以了解下
    2021-04-04
  • C#中GridView动态添加列的实现方法

    C#中GridView动态添加列的实现方法

    这篇文章主要介绍了C#中GridView动态添加列的实现方法,涉及C#中GridView的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 理解C#中参数的值和引用以及传递结构和类引用的区别

    理解C#中参数的值和引用以及传递结构和类引用的区别

    这篇文章主要介绍了理解C#中参数的值和引用以及传递结构和类引用的区别,文中举了两段代码例子来简单说明,需要的朋友可以参考下
    2016-01-01
  • 关于C#连接FTP时路径问题的解决方法

    关于C#连接FTP时路径问题的解决方法

    最近在工作中遇到一个需求,需要利用C#连接FTP,在连接过程中遇到一个问题,所以下面这篇文章主要给大家介绍了关于C#连接FTP时路径问题的解决方法,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • C# WPF自制白板工具

    C# WPF自制白板工具

    着电子屏幕技术的发展,普通的黑板已不再适用现在的教学和演示环境,电子白板应运而生,本文将通过C# WPF自制一个白板工具,感兴趣的可以了解下
    2024-11-11
  • c# 快速排序算法

    c# 快速排序算法

    快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)
    2013-10-10

最新评论