借助 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 

 

posted @ 2017-05-09 20:22  Coeus.酱油帝  阅读(598)  评论(0)    收藏  举报