通用BaseController,適用於通用mapper,減少80%單表CURD
阿新 • • 發佈:2018-12-14
上一次寫了一篇通用mapper的BaseService,上次的BaseService就是為了當前的Controller做鋪墊。
這次的通用Controller是解決重複的勞動而改寫的,只要繼承該Controller,可以完成單表複雜查詢,分頁查詢,新增,修改,批量修改,刪除,批量刪除等功能,您只需要把前端介面寫好就行了,剩下的單表操作請求就交給BaseController了,廢話不多說,開始上程式碼。
public abstract class BaseController<T> { protected Logger LOGGER= LoggerFactory.getLogger(this.getClass()); protected void beforeAdd(Map map){ } protected void afterAdd(Map map){ } public abstract BaseService<T> getBaseService(); @RequestMapping("add") public Object add(@RequestBody Map map){ beforeAdd(map); T newinstance = getBaseService().newinstance(map); T t = getBaseService().add(newinstance); afterAdd(map); return success(""); } @RequestMapping("delete") public Object delete(@RequestBody Map map){ T newinstance = getBaseService().newinstance(map); getBaseService().delete(newinstance); return success(""); } /** * 通過主鍵id批量刪除 引數必須為陣列,名為ids * @param ids * @return */ @RequestMapping("deletes") public Object batchDelete(@RequestParam("ids[]") Integer ids[]){ int i = getBaseService().deleteByIds(Arrays.asList(ids)); if(i>0) return success(); else return fail(""); } @RequestMapping("update") public Object update(@RequestBody Map map){ T t = getBaseService().newinstance(map); int rs= getBaseService().update(t); if(rs>0){ return success(null,""); }else{ return fail("更新失敗"); } } @RequestMapping("get") public Object getOne(@RequestBody Map map){ T t = getBaseService().newinstance(map); t=getBaseService().queryOne(t); if(null==t) return fail(""); return success(t,""); } @RequestMapping("getlist") public Object getList(@RequestBody Map map){ T t = getBaseService().newinstance(map); List<T> rs=getBaseService().queryList(t); return success(rs,""); } /** * 附帶檢索條件的分頁查詢 * @param map * @param pageNo * @param pageSize * @return */ @RequestMapping("getPageQuery") public Object getListByPage(@RequestBody Map map, @RequestParam("pageNo") int pageNo, @RequestParam("pageSize") int pageSize){ T t = getBaseService().newinstance(map); PageInfo<T> pageInfo =getBaseService().queryListByPage(t,pageNo,pageSize); return success(pageInfo,""); } /** * 無檢索條件的分頁查詢 * @param pageNo * @param pageSize * @return */ @RequestMapping("getPage") public Object getListByPage( @RequestParam("pageNo") int pageNo, @RequestParam("pageSize") int pageSize){ //T t = getBaseService().newinstance(null); T t=null; PageInfo<T> pageInfo =getBaseService().queryListByPage(t,pageNo,pageSize); return success(pageInfo,""); } public JSONObject fail(String err) { JSONObject object = new JSONObject(); object.put("status", "FAIL"); object.put("msg", err); object.put("code", 1); return object; } public JSONObject success() { JSONObject object = new JSONObject(); object.put("status", "SUCCESS"); object.put("code", 0); return object; } public JSONObject success(String msg) { JSONObject object = new JSONObject(); object.put("status", "SUCCESS"); object.put("msg", msg); object.put("code", 0); return object; } public JSONObject success(Object data ,String msg) { JSONObject object = new JSONObject(); object.put("status", "SUCCESS"); object.put("data", data); object.put("msg", msg); object.put("code", 0); return object; } /** * 從thread local獲取網路上下文 */ public HttpServletRequest getServletRequest() { RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes; if (requestAttributes instanceof ServletRequestAttributes) { servletRequestAttributes = (ServletRequestAttributes) requestAttributes; return servletRequestAttributes.getRequest(); } return null; } /** * 獲取當前客戶端session物件 * @return */ public HttpSession getSession() { return getServletRequest().getSession(); } }
前面的beforeAdd(),和afterAdd(),是鉤子函式,您可以選擇自定義覆蓋,修改該函式完成自己的邏輯,如當你註冊的時候,需要完成後臺密碼加密操作,就可以覆蓋beforeAdd方法,從引數map中拿到自己所需要的資料,非常方便。
注意:
請求該BaseController,前端的 ajax請求型別一定要是,content-type application/json,釋出的資料一定要是json格式,
泛型T對應查詢的實體類型別
- 查詢id=1 前端引數請求可為:{“id”:1} 通過ajax傳送請求就可以了 post/get /get
- 新增 {"username":"dbw","password":123} post/get /add
等等以此類推,只要引數是json,json欄位名與java Po類欄位對應就可以了,剩下的功能自己慢慢測試吧
希望能幫到大家,希望大家有什麼問題積極指出,還需要跟大家一塊學習啊,哈哈。