• ORM 轻量级框架 Dapper(介绍)


    Dapper是什么?

    Dapper是.net 一个简单的对象映射,就速度而言,他是轻量数据 Orm 之王,他和Ado.net的DataReader一样快。ORM是对象关系映射器,负责数据库和编程语言之间的映射。

    Dapper 继承了IDbConnection,通过扩展数据库查询方法进行数据库查询

    Dapper可与任何数据库提供程序使用,没有特定的数据库实现。

    Dapper怎样工作?

       主要分三个过程:

    •   创建一个IDbConnection 对象
    •   编写CRUD操作语句
    •   将操作语句作为参数,传递给Execute 方法

    安装

    Dapper通过Negut进行安装:https://www.nuget.org/packages/Dapper

    PM> Install-Package Dapper
    

    方法

    dapper使用多种方法扩展IDbConnection接口

    • Execute
    • Query
    • QueryFirst
    • QueryFirstOrDefault
    • QuerySingle
    • QuerySingleOrDefault
    • QueryMultiple
    string sqlOrderDetails = "SELECT TOP 5 * FROM OrderDetails;";
    string sqlOrderDetail = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;";
    string sqlCustomerInsert = "INSERT INTO Customers (CustomerName) Values (@CustomerName);";
    
    using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
    {
        var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();
        var orderDetail = connection.QueryFirstOrDefault<OrderDetail>(sqlOrderDetail, new {OrderDetailID = 1});
        var affectedRows = connection.Execute(sqlCustomerInsert,  new {CustomerName = "Mark"});
    
        Console.WriteLine(orderDetails.Count);
        Console.WriteLine(affectedRows);
    
        FiddleHelper.WriteTable(orderDetails);
        FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail });
    }
    

     

    参数

    执行和查询可以使用多种不同类型的参数

    • Anonymous
    • Dynamic
    • List
    • String
    // Anonymous
    var affectedRows = connection.Execute(sql,
                        new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
                        commandType: CommandType.StoredProcedure);
    
    // Dynamic
    DynamicParameters parameter = new DynamicParameters();
    
    parameter.Add("@Kind", InvoiceKind.WebInvoice, DbType.Int32, ParameterDirection.Input);
    parameter.Add("@Code", "Many_Insert_0", DbType.String, ParameterDirection.Input);
    parameter.Add("@RowCount", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);
    
    connection.Execute(sql,
        parameter,
        commandType: CommandType.StoredProcedure);
    
    int rowCount = parameter.Get<int>("@RowCount");
    
    // List
    connection.Query<Invoice>(sql, new {Kind = new[] {InvoiceKind.StoreInvoice, InvoiceKind.WebInvoice}}).ToList();
    // String
    connection.Query<Invoice>(sql, new {Code = new DbString {Value = "Invoice_1", IsFixedLength = false, Length = 9, IsAnsi = true}}).ToList();

    结果

    查询方法返回的结果可以映射为不同类型

    • Anonymous
    • Strongly Typed
    • Multi-Mapping
    • Multi-Result
    • Multi-Type
    string sqlOrderDetails = "SELECT TOP 10 * FROM OrderDetails;";
    
    using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools()))
    {
        var anonymousList = connection.Query(sqlOrderDetails).ToList();
        var orderDetails = connection.Query<OrderDetail>(sqlOrderDetails).ToList();
    
        Console.WriteLine(anonymousList.Count);
        Console.WriteLine(orderDetails.Count);
    
        FiddleHelper.WriteTable(orderDetails);
    
        FiddleHelper.WriteTable(connection.Query(sqlOrderDetails).FirstOrDefault());
    }
    

    实用工具

    • Async
    • Buffered
    • Transaction
    • Stored Procedure
    // Async
    connection.QueryAsync<Invoice>(sql)
    
    // Buffered
    connection.Query<Invoice>(sql, buffered: false)
    
    // Transaction
    using (var transaction = connection.BeginTransaction())
    {
        var affectedRows = connection.Execute(sql,
        new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
        commandType: CommandType.StoredProcedure,
        transaction: transaction);
    
        transaction.Commit();
    }
    
    // Stored Procedure
    var affectedRows = connection.Execute(sql,
    new {Kind = InvoiceKind.WebInvoice, Code = "Single_Insert_1"},
    commandType: CommandType.StoredProcedure);
  • 相关阅读:
    获取SpringMVC的映射路径
    Spring任务调度之Quartz集成
    Spring任务调度之SpringTask基于XML和基于注解的使用示例
    Redis分布式集群搭建
    京东软开实习岗
    C语言编程练习(一)
    servlet温习
    tomcat启动超过时间
    JDK版本更换,Eclipse中所有的项目报错
    Myeclipse2017C版本破解
  • 原文地址:https://www.cnblogs.com/yangda/p/13056357.html
Copyright © 2020-2023  润新知