介绍
Dapper是一个用于.NET的简单的对象映射,并且在速度上有着轻ORM之王的称号。
Dapper扩展IDbConnection,提供有用的扩展方法来查询数据库。
原生Dapper主要有两个扩展方法Execute、Query。
Execute用来执行增删改sql,以及存储过程
Query用来执行查询操作
Github:https://github.com/StackExchange/Dapper
Dapper案例
插入单行
using (var connection = GetConnection())
{
string sql = "INSERT INTO Order_item(ID,OrderID) VALUES(@ID,@OrderID)";
Order_item orderItem = new Order_item { ID = 10000, OrderID = 1000 };
connection.Execute(sql, orderItem);
}
插入多行
using (var connection = GetConnection())
{
string sql = "INSERT INTO Order_item(ID,OrderID) VALUES(@ID,@OrderID)";
Order_item[] orderItems =new Order_item[] {
new Order_item { ID = 10001, OrderID = 1000 },
new Order_item { ID = 10002, OrderID = 1000 },
};
connection.Execute(sql, orderItems);
}
普通查询
using (var connection = GetConnection())
{
string sql = "SELECT * FROM Order_item ORDER BY ID DESC LIMIT 10";
var orderItemList = connection.Query<Order_item>(sql);
}
IN查询
using (SqlConnection conn = new SqlConnection(connStr))
{
string sqlStr = @"select A.Id,A.Title,S.SeoKeywords from Article A where A.Id in @ids";
conn.Open();
var articleList = conn.Query(sqlStr, new { ids = new int[] { 41, 42, 43, 44, 45, 46, 47, 48 } });
foreach (var item in articleList)
{
Console.WriteLine(item.Id + " | " + item.SeoKeywords + " | :" + item.Title);
}
}
查询映射1
using (var connection = GetConnection())
{
string sql = "select u.id,u.email,a.FirstName,a.LastName from user_info u inner join user_address a on a.userid = u.id order by id desc limit 10";
var orderItemList = connection.Query<User_info, User_address, User_info>(sql, (userInfo, userAddress) =>
{
userInfo.Address = userAddress;
return userInfo;
}, splitOn: "firstname");//运行时,会从查询结果所有字段列表的最后一个字段开始进行匹配,一直到找到UserName这个字段(大小写忽略无所谓)
}
查询映射2
using (var connection = GetConnection())
{
string sql = "select u.id,u.email,a.FirstName,a.LastName from user_info u inner join user_address a on a.userid = u.id order by id desc limit 10";
using (var reader = connection.ExecuteReader(sql))
{
var userInfoParser = reader.GetRowParser<User_info>();
var userAddressParser = reader.GetRowParser<User_address>();
while (reader.Read())
{
var userInfo = userInfoParser(reader);
userInfo.Address = userAddressParser(reader);
}
}
}
多结果集
using (SqlConnection conn = new SqlConnection(connStr))
{
string sqlStr = @"select Id,Title,Author from Article where Id = @id
select * from QQModel where Name = @name
select * from SeoTKD where Status = @status";
using (var multi = conn.QueryMultiple(sqlStr, new { id = 11, name = "打代码", status = 99 }))
{
//multi.IsConsumed reader的状态 ,true 是已经释放
if (!multi.IsConsumed)
{
//注意一个东西,Read获取的时候必须是按照上面返回表的顺序 (article,qqmodel,seotkd)
//强类型
var articleList = multi.Read<Temp>();//类不见得一定得和表名相同
var QQModelList = multi.Read<QQModel>();
var SeoTKDList = multi.Read<SeoTKD>();
//动态类型
//var articleList = multi.Read();
//var QQModelList = multi.Read();
//var SeoTKDList = multi.Read();
}
}
}
参考:
https://www.cnblogs.com/Vincent-yuan/p/11504004.html
https://www.cnblogs.com/nontracey/p/9988759.html(DapperExtensions.NetCore 待学习!!)