zoukankan      html  css  js  c++  java
  • Dapper笔记-Query、Execute

    介绍

    Dapper是一个用于.NET的简单的对象映射,并且在速度上有着轻ORM之王的称号。
    Dapper扩展IDbConnection,提供有用的扩展方法来查询数据库。
    原生Dapper主要有两个扩展方法Execute、Query。
    Execute用来执行增删改sql,以及存储过程
    Query用来执行查询操作
    Github:https://github.com/StackExchange/Dapper

    Dapper案例

    插入单行

    
                using (var connection = GetConnection())
                {
                    string sql = "INSERT INTO Order_item(ID,OrderID) VALUES(@ID,@OrderID)";
                    Order_item orderItem = new Order_item { ID = 10000, OrderID = 1000 };
                    connection.Execute(sql, orderItem);
                }
    

    插入多行

                using (var connection = GetConnection())
                {
                    string sql = "INSERT INTO Order_item(ID,OrderID) VALUES(@ID,@OrderID)";
                    Order_item[] orderItems =new Order_item[] {
                        new Order_item { ID = 10001, OrderID = 1000 },
                        new Order_item { ID = 10002, OrderID = 1000 },
                    };
                    connection.Execute(sql, orderItems);
                }
    

    普通查询

                using (var connection = GetConnection())
                {
                    string sql = "SELECT * FROM Order_item ORDER BY ID DESC LIMIT 10";
                    var orderItemList = connection.Query<Order_item>(sql);
                }
    

    IN查询

    using (SqlConnection conn = new SqlConnection(connStr))
    {
        string sqlStr = @"select A.Id,A.Title,S.SeoKeywords from Article A where A.Id in @ids";
        conn.Open();
        var articleList = conn.Query(sqlStr, new { ids = new int[] { 41, 42, 43, 44, 45, 46, 47, 48 } });
        foreach (var item in articleList)
        {
            Console.WriteLine(item.Id + " | " + item.SeoKeywords + " | :" + item.Title);
        }
    }
    

    查询映射1

                using (var connection = GetConnection())
                {
                    string sql = "select u.id,u.email,a.FirstName,a.LastName from user_info u inner join user_address a  on a.userid = u.id order by id desc limit 10";
                    var orderItemList = connection.Query<User_info, User_address, User_info>(sql, (userInfo, userAddress) =>
                    {
                        userInfo.Address = userAddress;
                        return userInfo;
                    }, splitOn: "firstname");//运行时,会从查询结果所有字段列表的最后一个字段开始进行匹配,一直到找到UserName这个字段(大小写忽略无所谓)
    
                }
    

    查询映射2

                using (var connection = GetConnection())
                {
                    
                    string sql = "select u.id,u.email,a.FirstName,a.LastName from user_info u inner join user_address a  on a.userid = u.id order by id desc limit 10";
                    using (var reader = connection.ExecuteReader(sql))
                    {
                        var userInfoParser = reader.GetRowParser<User_info>();
                        var userAddressParser = reader.GetRowParser<User_address>();
                        while (reader.Read())
                        {
                           var userInfo = userInfoParser(reader);
                            userInfo.Address = userAddressParser(reader);
                        }
                        
                    }
    
                }
    

    多结果集

    using (SqlConnection conn = new SqlConnection(connStr))
    {
        string sqlStr = @"select Id,Title,Author from Article where Id = @id
                          select * from QQModel where Name = @name
                          select * from SeoTKD where Status = @status";
        using (var multi = conn.QueryMultiple(sqlStr, new { id = 11, name = "打代码", status = 99 }))
        {
            //multi.IsConsumed   reader的状态 ,true 是已经释放
            if (!multi.IsConsumed)
            {
                //注意一个东西,Read获取的时候必须是按照上面返回表的顺序 (article,qqmodel,seotkd)
                //强类型
                var articleList = multi.Read<Temp>();//类不见得一定得和表名相同
                var QQModelList = multi.Read<QQModel>();
                var SeoTKDList = multi.Read<SeoTKD>();
     
                //动态类型
                //var articleList = multi.Read();
                //var QQModelList = multi.Read();
                //var SeoTKDList = multi.Read();
            }
     
        }
    }
    

    参考:
    https://www.cnblogs.com/Vincent-yuan/p/11504004.html
    https://www.cnblogs.com/nontracey/p/9988759.html(DapperExtensions.NetCore 待学习!!)

  • 相关阅读:
    MySQL数据类型
    Linux网络编程:客户端/服务器的简单实现
    初学JAVA
    依据函数名字符串执行函数
    Windows Server 2012学习文档
    DELPHI WEBSERVICE
    常用函数、常量、类型记录
    CAD2007_DWG转PDF
    MCU_头文件编写
    MCU_存储器
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13578111.html
Copyright © 2011-2022 走看看