用轻量级ORM--Dapper实现泛型仓储

本文介绍了Dapper,一个轻量级的ORM工具,以其性能优势和简化数据库操作而闻名。文章详细讲解了Dapper的适用场景、本质、扩展方法和如何在.NETCoreWebApi中实现仓储模式,以及Dapper的扩展库如Dapper.FluentMap和Dommel的使用。

阅读本文你的收获

  1. 了解Dapper的适用场景
  2. 了解Dapper的本质其实是一些扩展方法
  3. 学会使用Dapper的扩展Domel来实现泛型仓储

一、什么是Dapper?

Dapper是一个轻量级的ORM(对象关系映射)工具,用于简化数据库操作。它和Entity Framework 不同,它属于轻量级的,并且是半自动的。

Dapper的优势:

  • Dapper非常小巧,只有一个帮助类,完全开源。
  • Dapper以性能优异著称。一般的ORM框架,性能和直接写原生的SQL语句比都差不少,但是Dapper执行SQL语句的性能非常好。

Dapper的使用场景:

  1. 快速的数据访问:Dapper提供了简单、快速的方法来执行数据库查询操作,可以有效地减少代码量和开发时间。

  2. 大数据量的操作:Dapper在处理大数据量的操作时表现出色,相比其他ORM工具,它具有更低的内存占用和更高的性能。

  3. 原始SQL查询:Dapper允许开发人员编写和执行原生SQL查询,可以灵活地处理复杂的查询需求。

  4. 存储过程的调用:Dapper支持存储过程的调用,并提供了简便的方式来执行存储过程并获取返回结果。

总之,Dapper适用于需要快速、高性能的数据访问的场景,尤其适用于对数据库操作要求较高的应用程序。

二、Dapper的本质

Dapper库对IDbConnection接口扩展了许多方法,使得与数据库交互变得更加方便和高效。下面是Dapper中定义的Query方法,它是一个扩展方法,扩展的目标类型是IDbConnection。

public static IEnumerable<T> Query<T>(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, bool buffered = true, int? commandTimeout = null, CommandType? commandType = null)

以下是Dapper扩展的一些常用方法(包括但不限于):

  1. Query方法:用于执行SQL查询并返回结果集。
  2. QueryFirstOrDefault方法:用于执行SQL查询并返回结果集中的第一行记录,如果结果集为空则返回默认值。
  3. QuerySingleOrDefault方法:用于执行SQL查询并返回唯一一条记录,如果结果集为空则返回默认值。
  4. Execute方法:用于执行SQL语句并返回受影响的行数。
  5. ExecuteScalar方法:用于执行SQL语句并返回受影响的行数。

这些方法还有与之对应的异步方法(Async结尾的方法)。

此外,Dapper还提供了一些类型用于处理与参数有关的操作,例如:DynamicParameters类:用于动态创建参数。该类的Add方法:用于向参数集合中添加参数,而Get方法:用于获取参数的值。

三、Dapper的入门案例

开发环境:

平台版本是:.NET6
开发框架:ASP.NET Core WebApi
开发工具:Visual Studio 2022
数据库版本:MS SQL Server 2014

3.1 安装Dapper

通过NuGet包管理器安装Dapper
安装Dapper

3.2 用Dapper执行SQL语句

以下案例用Dapper实现查询用户是否存在。

//头上引用命名空间
using Dapper;

//获取连接字符串(本例中是硬编码的,最好写在appsettings.json中)
private const string CONNECT_STRING = "Data Source=.;Initial Catalog=shoppingdb1;User ID=sa;Password=123abc!";

/// <summary>
/// 检查登录的账号和密码
/// </summary>
/// <param name="UserName"></param>
/// <param name="Password"></param>
/// <returns></returns>
public bool Login(string userName, string password)
{
   
   
    using(var conn = new SqlConnection(CONNECT_STRING))
    {
   
   
        string sql = "select * from [dbo].[User] where UserName=@UserName and Password=@Password";
		//Query<>方法用户执行select语句,获取结果集
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

采石之人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值