首页 > 其他分享 >DapperORM 之王。

DapperORM 之王。

时间:2023-02-19 02:11:06浏览次数:50  
标签:Author 之王 db DapperORM Query new Dapper public

Dapper在最初开发时就考虑到了性能和易用性,它支持在 事务,存储过程 或者 批量插入时进行静态或者动态的对象绑定。

 

使用 Visual Studio 安装 Dapper ORM

 

要想了解 Dapper,从下面的步骤开始吧:

 

    1. 打开 Visual Studio
    1. 点击 文件 -> 新建 -> 项目
    1. 选择 网站 -> http://ASP.Net Web Application
    1. 给 web 项目指定一个名字
    1. 然后选择一个 空模板
    1. 点击 确定 生成 project

 

这样我们就创建好了一个 http://ASP.Net web application 项目

 

如果你已经安装了 NuGet,你可以通过 NuGet 去安装 Dapper,做法就是在 解决方案窗口 下的 Project 上右键选择 Manage NuGet Package ... 并且找到 Dapper,然后点击安装开启这个安装过程,一旦 Dapper 被成功安装,你就可以愉快的玩起来了哈。

 

使用 Dapper ORM 进行增删查改

 

接下来我用 Dapper 写一些简单的 CURD 语句来操作数据库,考虑如下的 IDG 数据库,包含了一个 Author 表,表的字段如下:

 

  • ID

  • FirstName

  • LastName

 

在使用Dapper时,你需要针对 数据库表 创建一个简单的实体类(POCO class),下面定义了 Author 实体对应 IDB 数据库的 Author 表。

 

    public class Author
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

 

使用 Dapper 的 Query() 扩展方法,可以实现对数据库的查询然后将数据填充到你的 object model 中,下面方法的作用就是从 Author 表中查询所有的数据,然后存储到内存中,最后返回一个集合给调用方。

 

    public List<Author> ReadAll()
    {
         using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings[“AdventureWorks”].ConnectionString))
         {
             return db.Query<Author>
             (“Select * From Author”).ToList();
         }
    }

 

对了,为了能够使用上 Dapper 的扩展方法,你需要在代码文件的顶部引入 Dapper 命名空间,如下图:

 

 

 

 

下面的方法展示了如何从 Author table 表中查询指定的记录。

 

    public Author Find(int id)    
    {
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))
        {
            return db.Query<Author>(“Select * From Author “ + 
            WHERE Id = @Id”, new { id }).SingleOrDefault();
        }
    }

 

Dapper 的 Execute() 方法可以实现对数据的新增,修改,删除,此方法返回一个整数值,该值表示在执行查询时受到的影响行数。

 

下面的方法展示了如何使用 Dapper 更新一条记录。

 

    public int Update(Author author)
    {
        using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))
        {
            string sqlQuery ="UPDATE Author SET FirstName = @FirstName, " +
            “ LastName = @LastName “ + “WHERE Id = @Id”;
            int rowsAffected = db.Execute(sqlQuery, author);
            return rowsAffected;
        }
    }

 

正如上面代码所述,Update 方法返回了一个受影响的行数,意味着这么多的记录被修改,上面这段代码只会有一条记录被更新,所以说如果更新成功返回的就是 1。

 

在 Dapper ORM 中使用 存储过程

 

为了能够使用 Dapper 执行存储过程,在调用 Query 或者 Execute 方法时需要手工指定一下 CommandType 类型,下面的例子展示了如何使用 Dapper 执行 存储过程。

 

    public List<Author> Read()
    {
        using (IDbConnection db = new SqlConnection (ConfigurationManager.ConnectionStrings [“AdventureWorks”].ConnectionString))
        {
            string readSp ="GetAllAuthors";
            return db.Query<Author>(readSp, commandType: CommandType.StoredProcedure).ToList();
        }
    }

 

Dapper 框架也是支持事务操作的,如果有必要的话可以使用事务,使用方式很简单,你可以利用 BeginTransaction() 和 EndTransaction() 方法,其实和你使用 http://ADO.NET 的事务方式是一摸一样的,将需要事务的语句代码放置在 BeginTransaction 和 EndTransaction 之间即可。

 

Dapper ORM 真的是相当羽翼级 并且非常方便使用,它不会为你生成任何sql语句,在这种情况下还能够非常便捷的将查询结果映射到你的 POCO 对象上,最 的是,它的执行速度远超 Entity Framework,实际上,能和原生的 http://ADO.Net 媲美。

原文:https://zhuanlan.zhihu.com/p/338679056

标签:Author,之王,db,DapperORM,Query,new,Dapper,public
From: https://www.cnblogs.com/cdaniu/p/17134135.html

相关文章

  • 自命为缓存之王的Caffeine(6)
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~之前用Caffeine替代Redis的时候,发现先保存KV,再获取key,过期时间为3秒。但即使过了3秒,还是能获取到保存的数据。这是为什么......
  • 自命为缓存之王的Caffeine(6)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~   之前用Caffeine替代Redis的时候,发现先保存KV,再获取key,过期时间为3秒。但即使过了3秒,还是能获取到保存的数据。这......
  • 自命为缓存之王的Caffeine(5)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~   普通的缓存和Token的区别在于时效性和持久性。如果用Redis实现Token的话,可以:1、设置rediskv键值对的过期时间(......
  • 自命为缓存之王的Caffeine(4)
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~说了很多Caffeine的基本特性,但是骡子是马,终归还是要看能不能拉磨。SpringBoot有两种使用Caffeine的方式:1、直接引入Caffei......
  • 自命为缓存之王的Caffeine(3)
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~缓存的存储空间是远远小于磁盘的。所以对于有些过期的数据,就需要定期进行清理,腾出存储空间。Caffeine又是怎么做的呢?Caffe......
  • 自命为缓存之王的Caffeine(3)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~   缓存的存储空间是远远小于磁盘的。所以对于有些过期的数据,就需要定期进行清理,腾出存储空间。Caffeine又是怎么做......
  • 自命为缓存之王的Caffeine(2)
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~缓存除了过期策略,其实还有刷新和填充策略。刷新策略就是当数值变化时怎么处理,而所谓填充策略,就是将数据保存到缓存的方式......
  • 自命为缓存之王的Caffeine(2)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~   缓存除了过期策略,其实还有刷新和填充策略。刷新策略就是当数值变化时怎么处理,而所谓填充策略,就是将数据保存到缓......
  • 自命为缓存之王的Caffeine(1)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~  SpringBoot在2.0之前,可以使用Google Guava和Ehcache实现进程内缓存功能。GoogleGuava是基于LRU机制实现的进程内......
  • 自命为缓存之王的Caffeine(1)
    您好,我是湘王,这是我的51CTO博客,欢迎您来,欢迎您再来~SpringBoot在2.0之前,可以使用Google Guava和Ehcache实现进程内缓存功能。GoogleGuava是基于LRU机制实现的进程内缓存,而E......