zoukankan      html  css  js  c++  java
  • 使用轻量级ORM Dapper进行增删改查

        项目背景

         前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET、微软的EF、NH等。再跟经理讨论后,经理强调不要用Ef,NH做ORM,后期的sql优化不好做,公司也没有人对EF,Nh 等orm优化比较熟悉的。强调说的,我们的项目要做的得简单,可以使用ADO.NET 写原始的sql。但我自己还是喜欢ORM的,它可以提高数据访问层的开发。有一天,在订阅张善友 doNet跨平台微信公众号里,看到Dapper的推荐。了解之后,我自己喜欢喜欢Dapper,可以满足我这个项目的经理的要求,同时Dapper 对数据库的访问能做到Ado.net一样快。

      下面的链接是Dapper 在github的地址  https://github.com/StackExchange/dapper-dot-net。

      使用 Dapper 进行简单增删改查示例

       1、首先根据数据库表定义实体对象, 这个工作完全可以使用T4、Nvelocity或者RazorEngine 写一个代码生成器根据数据库表对象自动生成数据库表实体对象。这里我自己根据表写了一个对象

      

     View Code

      2. 在DAL层就可以使用实体对象传参 或者作为返回值

     View Code

       Dapper的优势

     1、Dapper是一个轻型的ORM类

    2、 Dapper语法简单,如果你喜欢写原始的sql,你一定喜欢Dapper。同时团队人员也很容易上手

    3、Dapper 速度快,速度接近ADO.NET访问数据库的效率。

    4、多数据库切换方便

        public int UpdateUserRoleByRoleId(UserRoleDbEntity model)
            {
                int affecgtRow = 0;
                string sql = @"UPDATE  `userrole`
                                SET  `AuthorityValue` = @AuthorityValue,
                                    `AuthorityDescription` = @AuthorityDescription
                                WHERE `RoleId` = @RoleId;";
                using (IDbConnection conn = new MySqlConnection(GlobalVariablesManager.G_Strconn))
                {
                    affecgtRow = conn.Execute(sql, model);
                }
                return affecgtRow;
            }

    这里mysql如果要切换为Sql Server ,只要修改链接  MySqlConnection---》SqlConnection。

    Dapper更多特性

    1、支持动态dynamic绑定

    复制代码
     1 var rows = connection.Query("select 1 A, 2 B union all select 3, 4");
     2 
     3 ((int)rows[0].A)
     4    .IsEqualTo(1);
     5 
     6 ((int)rows[0].B)
     7    .IsEqualTo(2);
     8 
     9 ((int)rows[1].A)
    10    .IsEqualTo(3);
    11 
    12 ((int)rows[1].B)
    13     .IsEqualTo(4);
    复制代码
    2、支持批量插入
    
    
     View Code
    3、支持多表关联
     View Code
    4、支持多结果查询
     View Code
    5 支持存储过程
     View Code
    6、参数自动绑定
    1 new {A = 1, B = "b"} // A will be mapped to the param @A, B to the param @B 
  • 相关阅读:
    第五周作业
    第四周编程总结
    第六周作业
    2019春第五周作业
    2019年春季学期第四周作业
    2019年春季学期第三周作业
    求最大值及其下标
    7-1
    第十周课程总结
    第九周课程总结&实验报告(七)
  • 原文地址:https://www.cnblogs.com/zcm123/p/9540575.html
Copyright © 2011-2022 走看看