天天看點

輕量高效ORM神器-Dapper,讓你的資料通路變得簡單

作者:小乖獸技術
輕量高效ORM神器-Dapper,讓你的資料通路變得簡單

Dapper是一個簡單易用的,輕量級的ORM架構,它與傳統的ORM架構不同之處在于它是面向SQL語句的,而不是面向對象的。它的設計目标是為了提供高效、簡單、可擴充的資料通路解決方案,尤其适用于資料查詢。

Dapper的核心内容可以分為以下幾個部分:

1. IDbConnection

IDbConnection是Dapper與資料庫互動的核心接口,它繼承自System.Data.IDbConnection。IDbConnection接口提供了一系列方法,包括Execute、Query、QueryFirstOrDefault、Insert、Update、Delete等,這些方法可以使用DynamicParameters類來處理SQL參數。

2. IDbTransaction

IDbTransaction是Dapper事務管理的核心接口,它繼承自System.Data.IDbTransaction。IDbTransaction接口提供了一系列方法,包括Commit、Rollback等。

3. DynamicParameters

DynamicParameters類是Dapper處理SQL參數的工具類,它可以動态地添加和删除SQL參數,并支援輸入參數、輸出參數和傳回值參數等。DynamicParameters類還提供了對SqlMapper.TypeHandler的支援,可以自定義類型轉換。

4. SqlBuilder

SqlBuilder類是Dapper動态建構SQL語句的工具類,它可以很友善地建構複雜的SQL查詢語句,例如分頁查詢、聯合查詢和動态查詢等。SqlBuilder類還支援多種ORM架構,例如Dapper.Contrib、DapperExtensions和PetaPoco等。

5. Dapper.Contrib

Dapper.Contrib是Dapper的擴充庫,提供了一系列實用方法,例如Insert、Update和Delete等,可以友善地進行資料操作。Dapper.Contrib還支援自動映射、批量插入和查詢等功能。

6. DapperExtensions

DapperExtensions是Dapper的擴充庫,提供了一系列實用方法,例如分頁查詢、緩存查詢和動态查詢等。DapperExtensions還支援多種ORM架構,例如Dapper.Contrib、PetaPoco和Simple.Data等。

Dapper提供了一組簡單易用的API,可以快速建構高效的資料通路應用程式。

使用場景和使用示例介紹:

Dapper适用于各種資料通路場景,特别适合複雜查詢和性能要求高的應用程式。以下是一些使用示例:

1. 簡單SQL查詢:

using (var connection = new SqlConnection(connectionString))
{
var sql = "SELECT * FROM Users WHERE Id = @Id";
var user = connection.QueryFirstOrDefault<User>(sql, new { Id = 1 });
}`           

2. 複雜SQL查詢:

using (var connection = new SqlConnection(connectionString))
{
var sql = @"
SELECT u.*, p.Name as PositionName
FROM Users u
LEFT JOIN Positions p ON u.PositionId = p.Id
WHERE u.Age >= @Age";
var users = connection.Query<User, Position, User>(
sql, (user, position) => { user.Position = position; return user; },
new { Age = 18 }, splitOn: "PositionId");`           

3. 使用Dapper.Contrib進行資料通路:

using (var connection = new SqlConnection(connectionString))
{
connection.Insert(new User() { Name = "John" });
var user = connection.Get<User>(1);
user.Name = "Peter";
connection.Update(user);
connection.Delete(user);
}`           

4. 使用Dapper和ASP.NET Core開發Web應用程式:

public class UserController : Controller
{
private readonly IDbConnection _connection;
public UserController(IDbConnection connection)
{
_connection = connection;
}
public IActionResult Index(int age)
{
var sql = "SELECT * FROM Users WHERE Age >= @Age";
var users = _connection.Query<User>(sql, new { Age = age });
return View(users);
}
}`           

Dapper的簡單、高效和可擴充的特點使得它在各種資料通路場景下都得到了廣泛應用。

參考官網:Dapper - Learn What is Dapper and Why You Should Use it (dapper-tutorial.net)

繼續閱讀