JavaWeb如何實現統一查詢介面(jfinal)
阿新 • • 發佈:2020-06-09
我發現我所有有查詢的controller都要呼叫service層的兩個方法 getById和getByKey 引數大致一樣
寫的時候基本都是複製粘帖。。。 於是idea老提示大量重複程式碼 好煩啊 於是就改進了一下
讓所有有關查詢的service實現一個QueryService的介面
介面定義倆方法
import com.jfinal.plugin.activerecord.Page; public interface QueryService<T> { Page<T> getById(String id,String flag); Page<T> getByKey(int page,int pageSize,String value,String flag); }
肯定要用泛型啊 不然強轉容易出錯 鬼知道我剛才呼叫的哪的這個方法
然後把service層的那些方法都統一一下引數
然後在一個公共控制器裡寫個靜態方法 那個註解應該可以不用寫 反正控制器不認靜態方法
@NotAction static <T> Page<T> query(QueryService<T> service,Controller controller,String key,String flag,int page,int pageSize) { value = value == null ? "" : value; Page<T> list; if ("id".equals(key)) { list = service.getById(value,flag); } else if ("key".equals(key)) { list = service.getByKey(page,pageSize,value,flag); } else { list = null; } if (list == null) { controller.renderJson("result","{'code':'203','info':'unknown key'}"); } else { controller.renderJson("result","{'code':'103','info':" + Json.getJson().toJson(list) + "}"); } return list; }
用的時候在控制器裡第一個寫呼叫的service物件,這個service一定要實現QueryService介面,第二個就傳this,因為查詢結束要傳給前臺的,我也是懶,都寫這裡了
如果render不寫這裡的話就把第二個引數刪掉,把12-16行的業務程式碼扔回控制器的方法裡寫
最後還返回list 我也不知道我想幹啥 等我想開了就把返回值刪掉算了
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。