C# Dapper:高效ORM框架的完美选择

发布时间:2023-05-19

一、快速上手

使用 Dapper 非常方便,通过 Nuget 引入 Dapper,然后通过 ADO.NET 的 Connection 对象创建一个实例,就可以轻松地进行数据库操作。Dapper 中,使用扩展方法 Execute()Query() 可以非常简单地执行数据库的增、删、改、查操作。以下是一个简单的示例,展示了 Dapper 如何执行一个 Select 语句:

using(var conn = new SqlConnection(connectionString))
{
    var results = conn.Query<T>(sql);
    return results.ToList();
}

这段代码首先使用 SqlConnection 对象创建了一个连接,使用 Query 方法以及 SQL 查询语句执行了一个查询操作,查询结果以 List<T> 类型返回,至此,我们已经完成了一个最简单的 Dapper 查询操作。

二、高效 ORM 框架

Dapper 是一个轻量级、高效的 ORM 框架,相对于其他类似的框架,Dapper 的速度更快,内存使用更少。 Dapper 是怎么做到高效的呢?Dapper 的高效主要得益于其使用了一些优秀的设计原则,比如:

  1. 缓存机制: Dapper 中内置了对缓存的支持,缓存的查询结果可以增加查询的效率,减少了对数据库的压力。例如:
conn.Query<T>(sql, param, commandTimeout: 20, buffered: true);

这段代码中的 buffered 参数表示是否使用缓存,默认值为 true,如果开启了缓存,那么查询结果会被缓存到内存中。当查询的数据比较大时,可以考虑关闭缓存。 2. 方法支持异步操作: Dapper 提供了异步操作的方法,充分利用 CPU 资源,做到高效查询数据。例如:

await conn.QueryAsync<T>(sql, param);
  1. 支持手动映射: Dapper 不同于其他 ORM 框架,采用手动映射,更加灵活且支持自定义映射。例如:
var data = connection.Query(sql, Map, splitOn: "", param:param).ToList();

这段代码中的 Map 对象就是自定义的映射规则,Dapper 会自动根据映射规则进行对象的转换。

三、Dapper 应用实例

1、使用 Dapper 操作 CBA 赛程

以下是使用 Dapper 查询 CBA 赛程的代码示例:

public class CbaGame
{
    public int Id { get; set; }
    public string HomeTeam { get; set; }
    public string GuestTeam { get; set; }
    public DateTime GameTime { get; set; }
}
public List<CbaGame> GetCbaGameList()
{
    var sql = "SELECT Id,HomeTeam,GuestTeam,GameTime FROM CbaGame ORDER BY GameTime DESC";
    using var conn = new SqlConnection(_connectionString);
    conn.Open();
    return conn.Query<CbaGame>(sql).ToList();
}

这段代码中,我们通过一个名为 CbaGame 的类来映射 CBA 比赛的信息。我们使用了 Query 方法来查询数据,并将结果填充到 CbaGame 对象中,最终返回一个 List 类型的数据。

2、使用 Dapper 实现 Clash 管理系统

以下是使用 Dapper 实现 Clash 管理系统的代码示例:

public class Player
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Position { get; set; }
    public int Number { get; set; }
}
public List<Player> GetPlayerList()
{
    using var conn = new SqlConnection(_connectionString);
    conn.Open();
    var sql = "SELECT Id,Name,Position,Number FROM Player ORDER BY Number ASC";
    return conn.Query<Player>(sql).ToList();
}

这段代码演示了如何使用 Dapper 获取选手列表,我们使用了一个名为 Player 的类来映射选手的信息。我们先通过 SqlConnection 对象创建连接,然后使用 Query 方法执行查询语句,并将返回的结果填充到 Player 对象中,最终返回一个 List 类型的选手数据。

3、使用 Dapper 操作 CBA 总决赛

以下是使用 Dapper 操作 CBA 总决赛的代码示例:

public class CbaFinal
{
    public int Id { get; set; }
    public string Winner { get; set; }
    public string RunnerUp { get; set; }
    public DateTime Year { get; set; }
}
public List<CbaFinal> GetFinalList()
{
    var sql = "SELECT Id,Winner,RunnerUp,Year FROM CbaFinal ORDER BY Year DESC";
    using var conn = new SqlConnection(_connectionString);
    conn.Open();
    return conn.Query<CbaFinal>(sql).ToList();
}

这段代码演示了如何使用 Dapper 获取 CBA 总决赛列表,我们使用了一个名为 CbaFinal 的类来映射每一年的总决赛信息。我们同样使用了 Query 方法来执行查询语句,并将返回的结果填充到 CbaFinal 对象中,最终返回一个 List 类型的数据。

四、总结

本文从快速上手 Dapper、Dapper 高效的 ORM 框架、实际应用中的 Dapper 应用场景三个方面,对 Dapper 进行了详细的阐述。Dapper 不仅使用方便,而且高效快捷,是非常优秀的 ORM 框架之一。它可以帮助开发者极大地提高数据操作的效率和开发质量,更加方便地完成各种数据操作任务。