• 以SQLserver为例的Dapper详细讲解


    Dapper是一种轻量级的ORM(对象关系映射)工具,它提供了高效且易于使用的方式来执行数据库操作。
    Dapper是由Stack Overflow团队开发并维护的,它的主要目标是提供比EF更快、更直接的方式访问数据库。
    Dapper的主要特点包括:
    基于纯ADO.NET而不是EF,因此性能更高
    支持多种数据库,如SQL Server、MySQL、Oracle等
    通过使用动态SQL和强类型参数,可以有效地减少代码量
    提供了多种简单易用的方法,在大多数情况下,只需一两行代码就可以完成常见的CRUD操作
    接下来,我们将详细介绍如何使用Dapper进行数据库操作。

    一、安装Dapper:

           Dapper可以通过NuGet包管理器安装。打开Visual Studio,选择“项目”菜单下的“管理NuGet程序包”,在搜索栏中输入“Dapper”,然后点击“安装”按钮即可。
           你也可以手动在项目中添加以下引用:

    using Dapper;
    using System.Data.SqlClient;
    View Code

    二、连接数据库
         在使用Dapper之前,我们需要先连接数据库。Dapper支持多种数据库,本文以SQL Server为例。
         创建一个 SqlConnection 对象,然后使用该对象打开数据库连接。

    string connectionString = "your connection string";
    using (var connection = new SqlConnection(connectionString))
    {
        connection.Open();
        // 这里执行数据库操作
    }
    View Code

    三、执行查询操作
         Dapper提供了多种方法来执行查询操作。其中,最常见的方法是 Query 和 QueryFirstOrDefault。
         Query
         Query 方法返回一个包含查询结果的 IEnumerable(T为查询结果映射的类型)。

    var products = connection.Query("SELECT * FROM Products");
    foreach (var product in products)
    {
        // 处理查询结果
    }
    View Code

         如果你需要使用参数化查询,可以像下面这样使用命名参数:

    var products = connection.Query("SELECT * FROM Products WHERE CategoryId = @CategoryId", new { CategoryId = 1 });
    foreach (var product in products)
    {
        // 处理查询结果
    }
    View Code

         或者使用匿名对象:

    var parameters = new { CategoryId = 1 };
    var products = connection.Query("SELECT * FROM Products WHERE CategoryId = @CategoryId", parameters);
    foreach (var product in products)
    {
        // 处理查询结果
    }
    View Code

        QueryFirstOrDefault 

        QueryFirstOrDefault 方法返回一个单个实体对象,如果未找到任何记录,则返回 null。

    var product = connection.QueryFirstOrDefault("SELECT * FROM Products WHERE Id = @Id", new { Id = 1 });
    if (product != null)
    {
        // 处理查询结果
    }
    View Code

        QueryMultiple
        如果你需要一次性执行多个查询语句,可以使用 QueryMultiple 方法。该方法返回一个 SqlMapper.GridReader 对象,通过该对象可以依次获取各个查询语句的结果。
        以下示例中,我们首先执行两个查询语句,获取商品和商品分类的数据。然后,我们使用 Read 方法分别获取这两个结果集,并将它们转换为实体对象列表。

    var multi = connection.QueryMultiple("SELECT * FROM Products; SELECT * FROM Categories");
    var products = multi.Read().ToList();
    var categories = multi.Read().ToList();
    View Code

    四、执行插入、更新和删除操作
          Dapper还提供了多种方法来执行插入、更新和删除操作。其中,最常见的方法是 Execute 和 ExecuteScalar。
          Execute
          Execute 方法返回受影响行数。

    var rowsAffected = connection.Execute("INSERT INTO Products (Name, Price) VALUES (@Name, @Price)", new { Name = "Product 1", Price = 9.99m });
    View Code

         你也可以使用命名参数或匿名对象:

    var parameters = new { Name = "Product 1", Price = 9.99m };
    var rowsAffected = connection.Execute("INSERT INTO Products (Name, Price) VALUES (@Name, @Price)", parameters);
    View Code


         ExecuteScalar
         ExecuteScalar方法返回一个单一的值,通常用于执行插入操作并返回插入记录的主键。

    var productId = connection.ExecuteScalar<int>("INSERT INTO Products (Name, Price) VALUES (@Name, @Price); SELECT CAST(SCOPE_IDENTITY() as int)", new { Name = "Product 2", Price = 19.99m });
    View Code

        与 Query 和 Execute 方法一样,你也可以使用命名参数或匿名对象。
    对象映射
        Dapper支持自动将查询结果映射到实体对象上。在使用Dapper时,我们需要确保查询语句中的列名与实体类的属性名相对应。
        以下是一个简单的示例:

    public class Product
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public decimal Price { get; set; }
    }
    
    // 查询商品数据
    var products = connection.Query("SELECT Id, Name, Price FROM Products");
    View Code

         注意,如果查询语句中的列名与实体类的属性名不匹配,则无法自动映射。此时,你需要手动指定映射关系。
         以下是一个手动映射的示例:

    public class Product
    {
        public int ProductId { get; set; }
        public string ProductName { get; set; }
        public decimal ProductPrice { get; set; }
    }
    
    // 查询商品数据
    var products = connection.Query("SELECT Id as ProductId, Name as ProductName, Price as ProductPrice FROM Products");
    View Code

     总结
          Dapper是一种简单易用、高效的ORM工具,它提供了多种方法来执行数据库操作,能够满足大多数开发人员的需求。在使用Dapper时,我们需要先连接数据库,然后使用 Query、QueryFirstOrDefault、QueryMultiple、Execute 或 ExecuteScalar 等方法执行相应的数据库          操作。同时,Dapper还支持自动将查询结果映射到实体对象上,从而进一步简化了代码编写。

     

  • 相关阅读:
    Android 扩大View可点击区域范围
    02_SpringSecurity学习之多种配置共存
    什么是Mirai僵尸网络
    c语言入门---操作符
    知识图谱--Jena基础操作和检索推理应用
    Java工程师常见面试题集锦
    JAVA后端开发面试基础知识(二)——JAVA
    chromedriver依赖安装失败 解决办法
    odoo qweb template小结
    软件测试工程师到底要不要转行开发? 2022测试生涯该如何转型升级?
  • 原文地址:https://www.cnblogs.com/wxsdyz/p/17348476.html