借助 Dapper 撬动大数据
C# 借助 Dapper 撬动大数据
处理千万级别的数据,丝毫感觉不到压力. 不多说了,拿起键盘就是一梭子。
对于Dapper 的用法及其简单的使用这里不做啰嗦:
1.使用Dapper可以自动进行对象映射!
2.轻量级,单文件。
3.支持多数据库。
4.Dapper原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象。
网上还有对Dapper的扩展类,这里就不赘述了。
Dapper:
下文的SQL=”指sql CRUD 模板” 这样简单灵活处理各种结果数据.
1. 获取List<T>
public List<T> GetList<T>(string sql, DynamicParameters conditon,string connectionString)
{
using (var conn = DapperFactory.CrateMysqlConnection(connectionString))
{
return conn.Query<T>(sql, conditon).ToList<T>();
}
}
2,获取T
public T GetEntity<T>(string sql, DynamicParameters conditon, string connectionString)
{
using (var conn = DapperFactory.CrateMysqlConnection(connectionString))
{
return conn.Query<T>(sql, conditon).SingleOrDefault();
}
}
3.批量执行 Insert Update Delete
public int Execute<T>(string sql, List<T> lis, string connectionString)
{
using (var conn = DapperFactory.CrateMysqlConnection(connectionString))
{
return conn.Execute(sql, lis.ToArray());
}
}
4.单条执行 Insert Update Delete
public int Execute(string sql, DynamicParameters Parameters, string connectionString)
{
using (var conn = DapperFactory.CrateMysqlConnection(connectionString))
{
return conn.Execute(sql, Parameters);
}
}
5.简单的封装分页
public List<T> GetListByPage<T>(string sql, DynamicParameters conditon, string connectionString, out int recordCount, int pageNo, int pageSize, string direction, string sort)
{
string CountSql = "select Count(1) as Count from (" + sql + ") a";
string PageSql = "select * from (" + sql + ") as a" + string.Format(" order by {0} {1} LIMIT {2},{3}", direction, sort, (pageNo - 1) * pageSize, pageSize);
using (var conn = DapperFactory.CrateMysqlConnection(connectionString))
{
dynamic countlist = conn.Query<dynamic>(CountSql, conditon).ToList<dynamic>();
long count = countlist[0].Count;
recordCount = int.Parse(count.ToString());
return conn.Query<T>(PageSql, conditon).ToList<T>();
}
}
7.执行统计
public dynamic GetdynamicList(string sql, Object conditon, string connectionString)
{
using (var conn = DapperFactory.CrateMysqlConnection(connectionString))
{
dynamic countlist = conn.Query<dynamic>(sql, conditon).ToList<dynamic>();
return countlist;
}
}
在各种ORM中 Dapper 的性能大家有目共睹。
现在本人处理各种大数据操作,及其项目的数据持久化,都是用Dapper
Dapper 也可以使用基于类似EF的那种 Save
1.conn.GetList<T>();
2.conn.Insert(T);
3.....
8.特别说一下Dapper 对存储过程支持也是特别友好:
存储过程
var dy = new DynamicParameters();
dy.Add(“”,””);
1.conn.Query<T>("Pro",_dy,commandType: CommandType.StoredProcedure).FirstOrDefault();
9.及其事务:
Try
{
var tran=conn.BeginTransaction();
conn.Execute(pageNoScanTable_sql, pageNoScanTable.ToArray(), transaction)
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
总结如下:高效率,高灵活。但在高效率高灵活下,代码量对稍微增多,但是那都是可以忽略的。当然在.net Core 下,Dapper 表现也是很出色。这里没有列出,后期列出。
欢迎 qq交流群:486937196

浙公网安备 33010602011771号