Dapper
Posted 该昵称有误
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dapper相关的知识,希望对你有一定的参考价值。
Dapper
Dapper是一个简单的.NET对象映射器,几乎与使用原始的ADO.NET数据读取器一样快。Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询数据库。
Dapper通过NuGet安装:https://www.nuget.org/packages/Dapper
文档地址:https://dapper-tutorial.net/dapper
Dapper是如何工作的
1、创建一个IDbConnection接口对象;
2、编写一个查询SQL来执行CRUD操作;
3、将查询SQL作为Execute方法的参数传递。
方法:
返回受影响行数
Execute()返回受影响行数
返回集合
Query()返回结果序列
返回1个结果
QueryFirst() 如果无结果会抛出错误“序列不包含任何元素”,如果有多个结果时,只返回第1个
QueryFirstOrDefault() 如果序列不包含任何元素则为默认值,如果有多个结果时,只返回第1个
QuerySingle() 如果序列中没有元素或有多个元素将引发异常。
QuerySingleOrDefault() 如果序列为空则为默认值。如果序列中有多个元素将引发异常。
批量执行
QueryMultiple() 可以在相同的命令和映射结果中执行多个查询。
参数:
sql:要执行的查询。
param:查询参数(默认为null)。
transaction:需要使用的事务(默认为null)。
buffered:是否从缓冲读取查询结果(默认为true)。
commandTimeout:命令执行超时时间(默认为null)。
commandType:命令类型(默认为null)。
public class Person { public int Id { get; set; } public string OpenId { get; set; } public string Name { get; set; } public ushort Age { get; set; } public PersonGroup Group { get; set; } } public class PersonGroup { public int Id { get; set; } public string OpenId { get; set; } public string Name { get; set; } public List<Person> Persons { get; set; } } public class Test { DbConnection GetConnection() { string dbConnStr = "data source=127.0.0.1;initial catalog=test;persist security info=true;user id=test;password=123456;charset=utf8;"; DbConnection dbConnection = new mysqlConnection(dbConnStr); dbConnection.Open(); return dbConnection; } public void Show() { try { List<Person> personList; List<PersonGroup> personGroupList; Person person1; Person person2; var obj = new { OpenId = "d3d19ed7376d4a388a1a8723c92ac05d", OpenId2 = "41c2f8fe6d084cb3a6be0b95df2bf0af" }; using (IDbConnection conn = GetConnection()) { //返回受影响行数 string sql = "UPDATE `person` SET Age=Age+1;"; int number = conn.Execute(sql, obj);//返回受影响行数 //返回集合 string sql1 = "SELECT * FROM `person`;"; personList = conn.Query<Person>(sql1, obj).ToList();//查询多条 //查询1条 string sql2 = "SELECT * FROM `person` WHERE OpenId=@OpenId;"; person1 = conn.QueryFirst<Person>(sql2, obj);//多条结果时,返回第1条。无结果时抛出异常 person2 = conn.QueryFirstOrDefault<Person>(sql2, obj);//多条结果时,返回第1条。无结果时返回默认值 string sql3 = "SELECT * FROM `person` ORDER BY Id DESC LIMIT 1 ;"; person1 = conn.QuerySingle<Person>(sql3, obj);//多条结果时或无结果时抛出异常 person2 = conn.QuerySingleOrDefault<Person>(sql3, obj);//多条结果时抛出异常,无结果时返回默认值 //多条语句执行 string sql4 = "SELECT * FROM `person` WHERE OpenId=@OpenId;SELECT * FROM `person_group` WHERE OpenId=@OpenId2;"; using (var reader = conn.QueryMultiple(sql4, obj)) { personList = reader.Read<Person>().ToList(); personGroupList = reader.Read<PersonGroup>().ToList(); } //结果多映射 //一对一 注意调用Distinct() string sql5 = "SELECT * FROM `person` p LEFT JOIN `person_group` pg ON p.GroupId=pg.Id;"; personList = conn.Query<Person, PersonGroup, Person>(sql5, (person, personGroup) => { person.Group = personGroup; return person; }).Distinct().ToList(); //一对多 注意调用Distinct() var groupDic = new Dictionary<int, PersonGroup>(); personGroupList = conn.Query<Person, PersonGroup, PersonGroup>(sql5, (person, personGroup) => { PersonGroup groupEntry; if (!groupDic.TryGetValue(personGroup.Id, out groupEntry)) { groupEntry = personGroup; groupEntry.Persons = new List<Person>(); groupDic.Add(groupEntry.Id, groupEntry); } groupEntry.Persons.Add(person); return groupEntry; }).Distinct().ToList(); } } catch (Exception) { throw; } } }
以上是关于Dapper的主要内容,如果未能解决你的问题,请参考以下文章