1. 程式人生 > >通用BaseController,適用於通用mapper,減少80%單表CURD

通用BaseController,適用於通用mapper,減少80%單表CURD

上一次寫了一篇通用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類欄位對應就可以了,剩下的功能自己慢慢測試吧

希望能幫到大家,希望大家有什麼問題積極指出,還需要跟大家一塊學習啊,哈哈。