Dapper學習 - Dapper.Rainbow(三) - Read

來源:互聯網
上載者:User

標籤:ini   繼承   mat   convert   manage   empty   自訂   multiple   mit   

前面已經介紹了新增/修改/刪除了, 接下來介紹一下Rainbow的Read方法.

一、Read -- Rainbow原生

1. 先看測試代碼

var conStr = ConfigurationManager.ConnectionStrings["Cons"].ToString();using (var conn = new MySqlConnection(conStr)){    var db = Rainbow.Init(conn, 2000);    //Rainbow提供方法    var entity = db.Teacher.Get(8);    entity = db.Teacher.First();    var listAll = db.Teacher.All();}

Rainbow在讀取資料這一塊, 就只提供了這幾個方法, 當然,  Dapper的方法, 在這裡仍然是可以用的, 通過db.Query的方式就可以用了

 

2. 源碼解析

/// <summary>/// Grab a record with a particular Id from the DB /// </summary>/// <param name="id"></param>/// <returns></returns>public T Get(TId id){    return database.Query<T>("select * from " + TableName + " where " + "Id" + " = @id", new { id }).FirstOrDefault();}public virtual T First(){    return database.Query<T>("select * from " + TableName + " LIMIT 1;").FirstOrDefault();    //return database.Query<T>("select top 1 * from " + TableName).FirstOrDefault();}public IEnumerable<T> All(){    return database.Query<T>("select * from " + TableName);}

First方法需要作出修改, 以適應mysql. 不過First方法是虛方法, 在沒有源碼修改的情況下, 可以用類去繼承重寫就可以了, 也還是比較方便的.有源碼的話, 更方便點

這裡的幾個封裝都是非常簡單的, 近乎於赤裸裸的sql了, 不在多說

 

二、自訂擴充

1. 測試代碼:

var conStr = ConfigurationManager.ConnectionStrings["Cons"].ToString();using (var conn = new MySqlConnection(conStr)){    var db = Rainbow.Init(conn, 2000);    //自訂擴充方法    var list = db.Teacher.GetListBy(" No>@No", new { No = 6060 });    var pageList = db.Teacher.GetPageList(1, 10, " No>@No", new { No = 6060 });}

經測試, 是可以正常使用的. 接下來看一下代碼

 

2. 自訂方法

/// <summary>/// 根據條件查詢/// </summary>/// <param name="whereStr">不帶where關鍵字</param>/// <returns></returns>public IEnumerable<T> GetListBy(string whereStr, dynamic param = null){    string sql = "select * from " + TableName;    if (!string.IsNullOrWhiteSpace(whereStr))        sql += " where " + whereStr;    return database.Query<T>(sql, param);}

此處的方法, 只適用於單表, 對於多表的查詢, 可以直接使用Dapper的方法, 寫sql.

/// <summary>/// 分頁方法/// </summary>/// <param name="pageIndex">當前頁碼</param>/// <param name="pageSize">每頁顯示條數</param>/// <param name="whereCondition">where條件</param>/// <param name="param">where條件中的參數列表</param>/// <param name="orderbyProperty">排序欄位;如 name DESC 或者 id DESC,name ASC</param>/// <returns></returns>public virtual PagedResult<T> GetPageList(int pageIndex, int pageSize, string whereCondition = "", dynamic param = null, string orderbyProperty = ""){    if (pageIndex < 1) pageIndex = 1;    var startItem = (pageIndex - 1) * pageSize;    string where = string.IsNullOrEmpty(whereCondition) ? "" : " WHERE " + whereCondition;    string orderby = string.IsNullOrEmpty(orderbyProperty) ? "" : " ORDER BY  " + orderbyProperty;    string sql = string.Format(@"SELECT *   FROM {0}   {1} {2}  LIMIT {3},{4};  SELECT COUNT(1) FROM {0} {1}", TableName, where, orderby, startItem, pageSize);    PagedResult<T> pagingResult = new PagedResult<T>(pageSize, pageIndex);    using (var result = database.QueryMultiple(sql, param))    {        List<T> list = result.Read<T>();        var totalCount = Convert.ToInt32(result.Read<long>()[0]);        pagingResult.Data = list;        pagingResult.TotalItemCount = totalCount;    }    return pagingResult;}

這個就是單表的分頁方法了, 如果想要多表的, 只需要稍微修改下這個方法, 就可以了. 就不貼了.

這裡牽涉到一個QueryMultiple方法, 是之前Dapper解析篇幅裡面沒有提到的, 這個方法是分次查詢, 如果sql語句是多個sql語句拼接而成, 那麼就可以讀取多次以擷取多個查詢結果

Dapper學習 - Dapper.Rainbow(三) - Read

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.