1. 程式人生 > 程式設計 >JavaWeb如何實現統一查詢介面(jfinal)

JavaWeb如何實現統一查詢介面(jfinal)

我發現我所有有查詢的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 我也不知道我想幹啥 等我想開了就把返回值刪掉算了

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。