DapperHelper
一、前言对于Dapper的使用,我们需要引入两个包:Dapper和SqlClient。二、示例我们首先创建了两张表,然后根据第一张表创建了一个实例模型类(没有包含主键)。public class Player{public string FullName { get; set; }public decimal Salray { get; set; }public int TeamId { get;
·
一、前言
对于Dapper的使用,我们需要引入两个包:Dapper和SqlClient。Dapper使用拓展方法对IDbConnection 对象进行拓展。Github链接:https://github.com/StackExchange/Dapper
二、示例
我们首先创建了两张表,然后根据第一张表创建了一个实例模型类(没有包含主键)。
public class Player
{
public string FullName { get; set; }
public decimal Salray { get; set; }
public int TeamId { get; set; }
public DateTime Birthday { get; set; }
}
然后我们写了一个辅助类,包括了一些基本的增删改查。
public class DapperHelper
{
string connStr = @"server=DESKTOP-P7UORUH\SQLEXPRESS;database=TestDB;uid=heater;pwd=123456";
/// <summary>
/// 批量插入多组数据
/// </summary>
/// <param name="players">需要插入的数据集合</param>
/// <returns>返回数据库表中受影响的行数</returns>
public int Insert(IEnumerable<Player> players)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
//参数名需要与属性名称相同,但是不一定需要与数据库中列名相同;参数顺序与列保持一致就行。
string sql = "insert into Players values(@FullName,@Salary,@TeamId,@Birthday)";
return conn.Execute(sql, players);
}
}
/// <summary>
/// 插入一组数据
/// </summary>
/// <param name="player">需要被插入的数据</param>
/// <returns>数据库中受影响的行数</returns>
public int Insert(Player player)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
//参数名需要与属性名称相同,但是不一定需要与数据库中列名相同;参数顺序与列保持一致就行。
string sql = "insert into Players values(@FullName,@Salary,@TeamId,@Birthday)";
return conn.Execute(sql, player);//直接将player对象传递进去,它会自动匹配。
}
}
/// <summary>
/// 通过名字模糊查询
/// </summary>
/// <param name="name">需要查询的名字</param>
/// <returns>返回一个可枚举的类型</returns>
public IEnumerable<Player> QueryByFullName(string name)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
string sql = "select * from Players where FullName like @FullName";
return conn.Query<Player>(sql, new { FullName = $"%{name}%" });//声明参数(需要与参数名保持一致) 匿名类型
}
}
/// <summary>
/// 根据ID进行查询
/// </summary>
/// <param name="id">需要查询的ID</param>
/// <returns>返回查询的数据</returns>
public Player QueryById(int id)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
string sql = "select * from Players where Id = @id";
return conn.QueryFirstOrDefault<Player>(sql, new { id = id });
}
}
/// <summary>
/// 通过ID来查询球队Name
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public string QueryTeamNameById(int id)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
string sql = "select Name from Teams where Id=(select TeamId from Players where Id = @id)";
return conn.ExecuteScalar<string>(sql, new { id = id });
}
}
/// <summary>
/// 通过薪水上下限来查询
/// </summary>
/// <param name="min">薪水最小值</param>
/// <param name="max">薪水最大值</param>
/// <returns>查询结果</returns>
public IEnumerable<Player> QueryBySalary(decimal min, decimal max)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
string sql = "select * from Players where Salray between @min and @max";
return conn.Query<Player>(sql, new { min=min,max=max });
}
}
/// <summary>
/// 查询在某些球队中的球员
/// </summary>
/// <param name="id">球队编号</param>
/// <returns>查询结果</returns>
public IEnumerable<Player> QueryByTeamId(IEnumerable<int> id)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
string sql = "select * from Players where TeamId in @id";//这里是in语法
return conn.Query<Player>(sql, new { id= id});//传递参数的时候 直接给的一个枚举类型
}
}
/// <summary>
/// 通过id来修改数据
/// </summary>
/// <param name="player">修改后的数据</param>
/// <param name="id">需要被修改的数据的ID</param>
/// <returns>返回受影响的行数</returns>
public int UpdateById(Player player, int id)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
string sql = "update Players set FullName=@FullName,Salray=@Salary,TeamId=@TeamId,Birthday=@Birthday where Id = @id";
//这里参数有点多 直接分开写了。
return conn.Execute(sql, new { FullName = player.FullName, Salary = player.Salray, TeamId = player.TeamId, Birthday = player.Birthday, id = id });
}
}
/// <summary>
/// 通过ID删除数据
/// </summary>
/// <param name="id">需要删除的ID</param>
/// <returns>受影响的行数</returns>
public int DeleteById(int id)
{
using (IDbConnection conn = new SqlConnection(connStr))
{
string sql = "delete from Players where Id = @id";
return conn.Execute(sql, new { id = id });
}
}
}
三、总结
Dapper的优点:
- 轻量。因为它就是对Ado.Net的简单封装。
- 高性能、速度快。是最靠近Ado.Net的ORM(Object Releational Mapping)
- 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
- 支持 .netcore。
Dapper的缺点:
- 还是有一点面向数据库编程的意思,还是需要依赖Sql,没有完全面向对象。所以还需要一些拓展达到零SQL。
更多推荐
已为社区贡献1条内容
所有评论(0)