基於ServiceStack.OrmLite框架 代碼性能、開發效率皆第一 沒有之一
1.此框架方便簡潔,便於學習研究。除了基本的增刪改查外,還有分頁,兼容分頁的多表查詢,同一業務處理時多次數據庫操作僅需要打開一次數據庫,反射對象映射賦值,分頁返回集合的json封裝函數,自定義對象,NLOG日志記錄,前端H+框架,sweetalert、Sortable、layer、swal等各種效果插件.....
2.本文主要介紹:
框架基本結構;
兼容分頁的多表查詢(僅打開一次數據庫,標准的分頁+多表sql語句)。
3.其余的自己研究學習擴展或者自行搭建框架時可參考。
結構圖如下:
第二張
=====================
下面開始簡單舉例說明多表查詢分頁在此項目的應用:
查詢以ajax形式:
流程為: ajax請求,查詢參數為表單序列化,請求獲取返回結果集合json,調用通用js函數進行html拼接,利用laypage生成分頁代碼。
效果圖為:
下圖為界面的html和js:name值和返回的json對象key一致,這樣就可以智能填充數據value,其中角色是多表查詢出來的,下面介紹后台代碼的時候會說到。
上面圖為ajax加載分頁數據,函數參數_pageIndex為當前頁,初始加載傳入1即可,其中fillTableData函數為填充table數據,
此函數可以通用,根據上面html 的table中th 的name值來自動匹配json中的key取value填充數據。
好了來看請求的控制器代碼
沒錯就兩行,此處僅有兩行代碼,有木有! (好了 大招在logic業務邏輯層里面)。
這個函數主要是處理查詢條件的,由於每個業務模塊的查詢字段和條件不一,所以還得手寫,只不過這里是動態拼接表達式 而非sql語句。之所以可以這樣干是因為需要一些引用:看下圖
那么真正的獲取數據集合及多表查詢(角色名稱)在下面這個函數GetPageList,注意看下面代碼的注釋
注意有個自定義對象 PagerSYSUser,下面給出定義
生成的數據庫訪問sql語句(多表+分頁)(本例使用的oracle)
。。。。。基本完工=======================================
值得注意的小地方有:
此處兩種寫法,如果使用第一種寫法的話,省去多表關聯,那么就得在對象里的屬性指定: 如下圖
其中返回集合對象json序列化方法:
在這里
======實用: 多表指定字段查詢:==================
這里可以指定多表的查詢中 指定每個表的指定字段查詢,返回結果的對象屬性和其屬性一致即可自動賦值。
生成的sql如: 只查詢了W_SYSUSER表的ADDRESS和W_ROLE表的RNAME兩個字段。
補充:多表查詢字段時候,如果兩個表有同名字段,那么返回對象的屬性命名寫法為{表名}{字段名}如下例:
注意表名首字母大寫,后面一定小寫,然后字段名的首字母一定大寫,后面小寫!
那么生成的sql語句為: N_COACH.NAME as N_coachName ,N_STUDENT.NAME as N_studentName,
框架源碼 :
(之前網盤鏈接失效,源碼找作者)
servicestack.ormlite
https://github.com/ServiceStack/ServiceStack.OrmLite ;
=============2016-9-21 更新 在servicestack內使用dapper 支持sql 提高靈活性