Dapper
Dapper的简介
Dapper是.NET下一个micro的ORM,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。Dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快。 使用ORM的好处是增、删、改很快,不用自己写sql,因为这都是重复技术含量低的工作,还有就是程序中大量的从数据库中读数据然后创建model,并为model字段赋值。这些ORM都可以轻松给你搞定。ORM给我们开发带来便利时,性能也是一个让我们不得不考虑的问题。一般的ORM性能和直接写原生的sql比都差不少,但是Dapper性能还很错,甚至和DbHelperSQL方式性能高出很多。
Dapper的优势
Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,编译后体积小。
Dapper很快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
Dapper支持多数据库。诸如:Mysql,SqlLite,Mssql系列,Oracle等一系列的数据库。
Dapper的R支持多表并联的对象。支持一对多 多对多的关系。并且没侵入性,想用就用,不想用就不用,无XML无属性,代码以前怎么写现在还怎么写。
Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能高。
Dapper支持net2.0及以上版本
Dapper语法十分简单,并且无须迁就数据库的设计。
Dapper的性能
Dapper 的主要特点是性能。以下数据显示对一个数据库执行 SELECT 出 500 条,并把数据映射到对象中需要多长时间。
性能测试分为三个方面:
POCO 序列化框架,支持从数据库获得静态类型的对象。使用原始的 SQL。
动态序列化框架,支持返回对象的动态列表。
典型的框架用法。往往不会涉及编写 SQL。
查询:
using Dapper; using System.Data; using MySql.Data.MySqlClient; using (IDbConnection connection = new MySqlConnection("Server = localhost; User ID = admin; Password = admin; port = 3306; Database = flower; CharSet = utf8; pooling = true; SslMode = None; ")) { var dt = new DataTable(); IDataReader result = connection.ExecuteReader("select ID, Name, Age, Address from person"); dt.Load(result); Console.WriteLine("--------------------IDataReader----------------------"); for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { Console.Write(dt.Columns[j].ColumnName + ":" + dt.Rows[i][dt.Columns[j].ColumnName].ToString() + " "); } Console.WriteLine(); } } Console.WriteLine("--------------------Mapping----------------------"); using (IDbConnection connection = new MySqlConnection("Server = localhost; User ID = admin; Password = admin; port = 3306; Database = flower; CharSet = utf8; pooling = true; SslMode = None; ")) { var persons = await connection.QueryAsync<Person>("select ID, Name, Age, Address from person"); foreach (var item in persons) { Console.WriteLine(item); } } public class Person { public int ID { get; set; } public string Name { get; set; } public int Age { get; set; } public string Address { get; set; } public override string ToString() { return $"ID:{ID} Name:{Name} Age:{Age} Address:{Address}"; } }
OutPut:
修改:
using Dapper; using System.Data; using MySql.Data.MySqlClient; using (IDbConnection connection = new MySqlConnection("Server = localhost; User ID = root; Password = root; port = 3306; Database = flower; CharSet = utf8; pooling = true; SslMode = None; ")) { var dt = new DataTable(); connection.Open(); using (IDbTransaction dbTransaction= connection.BeginTransaction()) { int result = await connection.ExecuteAsync("update person set Name='老大' where id=1 ", dbTransaction); dbTransaction.Commit(); //dbTransaction.Rollback(); } IDataReader res = connection.ExecuteReader("select ID, Name, Age, Address from person"); dt.Load(res); Console.WriteLine("--------------------IDataReader----------------------"); for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { Console.Write(dt.Columns[j].ColumnName + ":" + dt.Rows[i][dt.Columns[j].ColumnName].ToString() + " "); } Console.WriteLine(); } }
查看结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!