线上教育平台推广怎么做,seo网站托管,网站建设是自学好还是,wordpress+修改邮箱一、Dapper介绍及特性 Dapper是一个.NET平台上的轻量级对象关系映射#xff08;ORM#xff09;工具#xff0c;它通过扩展IDbConnection接口#xff0c;提供了一系列的扩展方法来执行SQL查询并将结果映射到.NET对象中。Dapper以其高性能和简单易用著称#xff0c;特别适合…
一、Dapper介绍及特性 Dapper是一个.NET平台上的轻量级对象关系映射ORM工具它通过扩展IDbConnection接口提供了一系列的扩展方法来执行SQL查询并将结果映射到.NET对象中。Dapper以其高性能和简单易用著称特别适合需要快速开发和对性能有较高要求的场景。 Dapper的主要特点
高性能Dapper执行的是原始SQL查询避免了复杂的查询生成过程因此性能接近于手写ADO.NET代码。简单易用Dapper的API简洁直观学习曲线低可以快速上手。轻量级没有复杂的上下文管理和变化跟踪机制减少了性能开销。参数化查询支持参数化查询有效防止SQL注入攻击。事务支持支持事务处理确保数据操作的一致性。灵活性允许开发者完全控制SQL语句实现更复杂的查询逻辑。
Dapper的基本用法
查询数据使用Query方法执行SQL查询并返回结果集。插入数据使用Execute方法执行插入操作。更新数据使用Execute方法执行更新操作。删除数据使用Execute方法执行删除操作。存储过程通过指定commandType: CommandType.StoredProcedure来执行存储过程。
Dapper的高级功能
多映射支持多表查询并将结果映射到多个对象。动态对象支持动态对象适用于不确定返回结构的查询。缓存功能内置简单的缓存功能可以提高查询性能。
Dapper的使用场景 Dapper适合于需要高效数据访问的应用场景尤其是在已有数据库项目中快速集成和使用。它的优势在于高性能、简单易用和灵活性但不适合复杂的业务逻辑处理场景因为没有复杂的对象关系映射和LINQ支持。 二、安装Dapper
Dapper可以通过NuGet包管理器安装
PM Install-Package Dapper
Dapper的工作原理 Dapper通过扩展IDbConnection接口提供了Query、Execute、QueryFirst、QueryFirstOrDefault、QuerySingle、QuerySingleOrDefault、QueryMultiple等一系列扩展方法来执行数据库操作。它缓存了SQL查询计划减少了SQL解析和执行的开销。
Dapper与其他ORM框架的比较 与Entity Framework、NHibernate等ORM框架相比Dapper在性能、易用性和配置灵活性方面具有优势但在映射能力和LINQ支持方面则较为简单。与ADO.NET相比Dapper提供了更简单的API和对象映射功能但性能相当。 总的来说Dapper是一个在性能和易用性之间找到平衡点的ORM框架适合于多种数据库操作需求。
GitHub - DapperLib/Dapper: Dapper - a simple object mapper for .Nethttps://github.com/DapperLib/Dapper
三、Dapper性能优势
Dapper 是一个高性能的微 ORM它通过提供一组映射和查询扩展方法来使用。与 Entity Framework 或 NHibernate 这样的全功能 ORM 相比Dapper 的性能优势主要体现在以下几个方面 执行效率Dapper 的性能接近原生 ADO.NET因为它不会像其他 ORM 那样生成额外的查询来跟踪更改或处理延迟加载 。 轻量级Dapper 作为一个微型 ORM它不需要复杂的配置和上下文管理这减少了内存消耗和性能开销 。 直接执行 SQLDapper 允许开发者编写原始 SQL 语句这意味着可以精确控制查询和优化性能避免了 ORM 自动生成的低效 SQL 语句 。 映射缓存Dapper 能够缓存 SQL 查询结果的映射信息这样在后续的查询中可以快速反序列化结果提高了重复查询的性能 。 批量操作Dapper 支持批量插入和更新操作这些操作通常比逐条处理数据要快得多 。 避免不必要的对象创建Dapper 只有在必要时才会创建对象这意味着它能够最小化内存中对象的数量从而提高性能 。 扩展性Dapper 允许开发者通过扩展方法来增加新功能而不需要改动核心库这样可以保持库的轻量级和高性能 。 多数据库支持Dapper 支持多种数据库系统开发者可以根据项目需求选择最合适的数据库而不会因为 ORM 的限制而牺牲性能 。 控制权Dapper 提供了对 SQL 语句的完全控制权开发者可以优化查询以适应特定的数据库和索引设计从而获得更好的性能 。 四、Dapper支持哪些数据库
SQL Server通过使用System.Data.SqlClient.SqlConnection来连接SQL Server数据库。MySQL通过使用MySql.Data.MySqlClient.MySqlConnection来连接MySQL数据库。PostgreSQL通过使用Npgsql.NpgsqlConnection来连接PostgreSQL数据库。SQLite通过使用System.Data.SQLite.SQLiteConnection来连接SQLite数据库。Oracle通过使用Oracle.ManagedDataAccess.Client.OracleConnection来连接Oracle数据库。IBM DB2可以通过使用System.Data.OleDb.OleDbConnection或其他相应的DB2连接类来连接IBM DB2数据库。 五、示例代码
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using Dapper;public class Program
{private static readonly string ConnectionString your_connection_string_here;public static void Main(){// 查询示例var users QueryUsers();Console.WriteLine(查询到的用户);foreach (var user in users){Console.WriteLine($ID: {user.Id}, Name: {user.Name});}// 插入示例var newUser new User { Name John Doe };int affectedRows InsertUser(newUser);Console.WriteLine($插入新用户影响行数{affectedRows});// 更新示例newUser.Name Jane Doe;affectedRows UpdateUser(newUser);Console.WriteLine($更新用户影响行数{affectedRows});// 删除示例affectedRows DeleteUser(newUser.Id);Console.WriteLine($删除用户影响行数{affectedRows});}public static ListUser QueryUsers(){using (var connection new SqlConnection(ConnectionString)){return connection.QueryUser(SELECT * FROM Users).ToList();}}public static int InsertUser(User user){using (var connection new SqlConnection(ConnectionString)){string sql INSERT INTO Users (Name) VALUES (Name);;return connection.Execute(sql, user);}}public static int UpdateUser(User user){using (var connection new SqlConnection(ConnectionString)){string sql UPDATE Users SET Name Name WHERE Id Id;;return connection.Execute(sql, user);}}public static int DeleteUser(int id){using (var connection new SqlConnection(ConnectionString)){string sql DELETE FROM Users WHERE Id Id;;return connection.Execute(sql, new { Id id });}}
}public class User
{public int Id { get; set; }public string Name { get; set; }
}