我發現我全部有查詢的controller都要調用service層的兩個方法 getById和getByKey 參數大體同樣ide
寫的時候基本都是複製粘帖。。。 因而idea老提示大量重複代碼 好煩啊 因而就改進了一下this
讓全部有關查詢的service實現一個QueryService的接口idea
接口定義倆方法spa
1 import com.jfinal.plugin.activerecord.Page; 2 3 public interface QueryService<T> { 4 5 Page<T> getById(String id, String flag); 6 7 Page<T> getByKey(int page, int pageSize, String value, String flag); 8 }
確定要用泛型啊 否則強轉容易出錯 鬼知道我剛纔調用的哪的這個方法code
而後把service層的那些方法都統一一下參數對象
而後在一個公共控制器裏寫個靜態方法 那個註解應該能夠不用寫 反正控制器不認靜態方法blog
1 @NotAction 2 static <T> Page<T> query(QueryService<T> service,Controller controller, String key, String value, String flag, int page, int pageSize) { 3 value = value == null ? "" : value; 4 Page<T> list; 5 if ("id".equals(key)) { 6 list = service.getById(value, flag); 7 } else if ("key".equals(key)) { 8 list = service.getByKey(page, pageSize, value, flag); 9 } else { 10 list = null; 11 } 12 if (list == null) { 13 controller.renderJson("result", "{'code':'203','info':'unknown key'}"); 14 } else { 15 controller.renderJson("result", "{'code':'103','info':" + Json.getJson().toJson(list) + "}"); 16 } 17 return list; 18 }
用的時候在控制器裏第一個寫調用的service對象,這個service必定要實現QueryService接口,第二個就傳this,由於查詢結束要傳給前臺的,我也是懶,都寫這裏了接口
若是render不寫這裏的話就把第二個參數刪掉,把12-16行的業務代碼扔回控制器的方法裏寫get
最後還返回list 我也不知道我想幹啥 等我想開了就把返回值刪掉算了io