一、简介 。Net平台下有非常多的ORM框架,ef(core)、dapper、nhibernate、sqlsugar、freesql等等,每个orm都有自己的特点,但性能这块还是dapper牛逼。二、使用案例 创建一个Asp。NetCoreWebApi项目,接口文档可以参照上一篇文章介绍的Knife4j进行配置。项目引入依赖:PackageReferenceIncludeDapperVersion2。0。123PackageReferenceIncludeMicrosoft。Data。SqlClientVersion3。1。2 项目使用SqlServer数据库,需要创建一个数据库:Article,一张表Product 建表脚本:CREATETABLE〔dbo〕。〔Product〕(〔ProductId〕〔varchar〕(50)NOTNULL,〔ProductName〕〔nvarchar〕(50)NOTNULL,〔CategoryId〕〔nvarchar〕(50)NULL,CONSTRAINT〔PKProduct〕PRIMARYKEYCLUSTERED(〔ProductId〕ASC)WITH(PADINDEXOFF,STATISTICSNORECOMPUTEOFF,IGNOREDUPKEYOFF,ALLOWROWLOCKSON,ALLOWPAGELOCKSON)ON〔PRIMARY〕)ON〔PRIMARY〕 新建数据库访问类:DataAccessusingSystem。Collections。Generic;usingSystem。Threading。Tasks;usingMicrosoft。Data。SqlClient;usingSystem。Data;usingDapper;namespaceApiDoc。Controllers{publicclassDataAccess{privatereadonlystringConnectionStringDataSource。;InitialCatalogArticle;UserIDsa;Password数据库密码;publicasyncTaskintExecuteT(stringsql,Tentity){usingIDbConnectionconnectionnewSqlConnection(ConnectionString);returnawaitconnection。ExecuteAsync(sql,entity);}publicasyncTaskIEnumerableTGetListT(stringsql,objectparamnull){usingIDbConnectionconnectionnewSqlConnection(ConnectionString);returnawaitconnection。QueryAsyncT(sql,param);}}} 新建产品类:Productsummary产品类summarypublicclassProduct{summary产品IDsummarypublicstringProductId{get;set;}summary产品名称summarypublicstringProductName{get;set;}summary产品分组summarypublicstringCategoryId{get;set;}} 新建控制器:ProductController〔Route(api〔controller〕)〕〔ApiController〕publicclassProductController:ControllerBase{summary读取单个summaryreturnsreturns〔HttpGet(Get)〕publicasyncTaskProductGet(stringproductId){DataAccessdataAccessnewDataAccess();varlistawaitdataAccess。GetListProduct(34;selectfromProductwhereproductId{productId})。ConfigureAwait(false);returnlist。FirstOrDefault();}summary读取集合summaryreturnsreturns〔HttpGet(List)〕publicasyncTaskIEnumerableProductList(){DataAccessdataAccessnewDataAccess();returnawaitdataAccess。GetListProduct(34;selectfromProduct)。ConfigureAwait(false);returnnewListProduct(){newProduct{ProductId1,ProductName优质大米,CategoryId1},newProduct{ProductId2,ProductName优质大豆,CategoryId1},};}summary删除summaryparamnameproductId主键param〔HttpDelete(Delete)〕publicasyncTaskintDelete(stringproductId){DataAccessdataAccessnewDataAccess();returnawaitdataAccess。ExecuteProduct(DELETEFROM〔dbo〕。〔Product〕WHERE〔ProductId〕{productId},null);}summary新增summaryparamnameproduct产品param〔HttpPost(Add)〕publicasyncTaskintAdd(Productproduct){DataAccessdataAccessnewDataAccess();returnawaitdataAccess。ExecuteProduct(INSERTINTO〔Product〕(〔ProductId〕,〔ProductName〕,〔CategoryId〕)VALUES(ProductId,ProductName,CategoryId),product);}summary修改summaryparamnameproduct产品param〔HttpPut(Edit)〕publicasyncTaskintEdit(Productproduct){DataAccessdataAccessnewDataAccess();returnawaitdataAccess。ExecuteProduct(UPDATE〔Product〕SET〔ProductName〕ProductName,〔CategoryId〕CategoryIdWHERE〔ProductId〕{product。ProductId},product);}} 准备好后,我们的项目是这样的: 我们将控制器里面的List方法改为返回静态数据: 运行项目,执行List方法我们得到一些测试数据: 使用这些测试数据,我们进行新增 新增完两条数据后,我们将List方法改回读数据库: 执行List方法: 剩余的修改和删除我就不一一演示了,整个过程非常简单可以动手试试。 Dapper是一个IDbConnection对象的扩展库,增加了非常多的查询和执行命令的方法: 大家可以根据自己的需求选择其中的方法。 作为一个高性能的ORM其使用者也是非常多,为了弥补需要手写sql的缺点,社区内有非常多的扩展库比如:DapperExtensions等可以实现无sql化。