SpringBoot2.1版本的我的應用開發框架 - 實現基礎controller、service、前端封裝返回json體等

本篇做爲SpringBoot2.1版本的我的開發框架 子章節,請先閱讀SpringBoot2.1版本的我的開發框架再次閱讀本篇文章前端

後端項目地址:SpringBoot2.1版本的我的應用開發框架vue

前端項目地址:ywh-vue-adminjava

咱們實現了代碼生成的功能後,對於一個web項目來講,咱們還要對返回前端的格式進行一個簡單的封裝Result,全部返回的類型都是統一的格式,以及咱們在自動生成的代碼能夠繼承咱們自定義的基礎controller等類,便於咱們本身擴展。git

基礎枚舉類

在common子模塊下的base包下建立基礎的BaseEnum枚舉類用來定義描述信息維護到枚舉裏面,儘可能不要在代碼中直接出現魔法值(如一些編碼、中文等,直接常量等),之後的枚舉常量類也能夠按照這種模式來寫。github

package com.ywh.common.base;
 
/** * CreateTime: 2018-12-15 16:06 * ClassName: BaseEnum * Package: com.ywh.common.base * Describe: * 基礎枚舉類 * * @author YWH */
public enum BaseEnum {
 
    /** *後臺處理成功 */
    SUCCESS("後臺處理成功!",200),
    
    。。。。。。。。省略代碼,具體代碼請前往github查看
    
    /** * 404錯誤攔截 */
    NO_HANDLER("這個頁面石沉大海了!接口沒找到",404);
 
    private String msg;
 
    private int index;
 
    BaseEnum(String msg, int index) {
        this.msg = msg;
        this.index = index;
    }
 
    public String getMsg() {
        return msg;
    }
 
    public void setMsg(String msg) {
        this.msg = msg;
    }
 
    public int getIndex() {
        return index;
    }
 
    public void setIndex(int index) {
        this.index = index;
    }
}
複製代碼

封裝前端返回json格式

在common下utils包下的建立Result類,做爲前端的返回對象,Controller的直接返回對象都是Result。web

package com.ywh.common.utils;

import com.ywh.common.base.BaseEnum;
 
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
 
/** * CreateTime: 2018-12-15 15:46 * ClassName: Result * Package: com.ywh.common.utils * Describe: * 前端返回json格式封裝類 * * @author YWH */
public class Result extends Object implements Serializable{
    private static final long serialVersionUID = 1348172152215944560L;
 
    /** * 返回狀態碼,200爲正確,100爲失敗 */
    private int code;
 
    /** * 返回處理信息,成功或者失敗 */
    private String msg;
 
    /** * 成功返回true,失敗返回false */
    private Boolean success;
 
    /** * 返回給前端的數據 */
    private Map<String, Object> extend = new HashMap<String ,Object>();
 
    /** * 成功返回的json封裝體 * @param value 原始數據 * @return json格式 */
    public static Result successJson(Object value){
        Result results = new Result();
        results.setCode(BaseEnum.SUCCESS.getIndex());
        results.setMsg(BaseEnum.SUCCESS.getMsg());
        results.setSuccess(true);
        results.getExtend().put("data",value);
        return results;
    }
 
    /** * 失敗返回的json封裝體 * @return json格式 */
    public static Result errorJson(){
        Result results = new Result();
        results.setCode(BaseEnum.FAIL.getIndex());
        results.setSuccess(false);
        results.setMsg(BaseEnum.FAIL.getMsg());
        return results;
    }
 
    。。。。。。省略代碼,具體代碼請前往github查看。
}
複製代碼

在core的ExampleController中寫一個方法,用postman測試一下咱們的前端結構體json

@RestController
@RequestMapping("ExampleController")
public class ExampleController{
 
    @GetMapping("findAll")
    public Result findAll(){
        return Result.successJson("成功了");
    }
 
}
複製代碼
{
    "extend": {
        "data": "成功了"
    },
    "msg": "後臺處理成功!",
    "code": 200,
    "success": true
}
複製代碼

MybatisPlus分頁插件

MybatisPlus爲咱們提供了分頁插件,使用也很方便,建立一個配置類便可使用MybatisPlus爲我提供的分頁查詢了,在common下的config包下建立MybatisPlusConfig後端

package com.ywh.common.config;
/** * CreateTime: 2018-12-18 20:39 * ClassName: MybatisPlusConfig * Package: com.ywh.common.config * Describe: * MybatisPlus的配置類 * * @author YWH */
@EnableTransactionManagement
@Configuration
public class MybatisPlusConfig {

    /** * 分頁插件 * @return */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

}
複製代碼

在common下的Entity中建立BasePage類,用於前端傳入參數的接收實體類,咱們能夠控制當前頁和一頁中顯示幾條數據app

package com.ywh.common.entity;
 
import lombok.Data;
 
/** * CreateTime: 2018-11-22 10:23 * ClassName: BasePage * Package: com.ywh.common.entity * Describe: * 分頁實體類 * * @author YWH */
@Data
public class BasePage {
 
    /** * 當前每頁顯示數 */
    private Integer size;
 
    /** * 當前頁數 */
    private Integer current;
 
 
}
複製代碼

定義基礎Controller、service等

對於咱們自動生成的代碼咱們能夠繼承我自定義的Controller等等,在common下base包中建立如下類,封裝以下:框架

BaseControllerBaseServiceBaseServiceImplBaseDao: 由於都貼出來太長了,剩下具體代碼可前往github查看

package com.ywh.common.base;
 
/** * CreateTime: 2018-11-21 9:09 * ClassName: BaseController * Package: com.ywh.common.base * Describe: * 基礎Controller 全部的Controller繼承這個類,若是有什麼通用的方法,可自行擴展 * getList addData addDataBatch updateById updateByColumn deleteByColumn deleteById deleteByIds * @author YWH */
public class BaseController<Service extends IService,T> {
 
    private static final Logger log = LoggerFactory.getLogger(BaseMapper.class);
 
    @Autowired
    private Service service;
 
    /** * 獲取全部的數據 * @return 返回前端json數據 */
    @GetMapping("getList")
    public Result getList(){
        List<T> list = service.list();
        return Result.successJson(list);
    }
 
    /** * 分頁查詢 * @param pn 分頁的實體類 * @return 返回前端json數據 */
    @GetMapping("getPageList")
    public Result getPageList(@RequestBody BasePage pn){
        Page<T> pojo = new Page<T>(pn.getCurrent(),pn.getSize());
        IPage<T> page = service.page(pojo);
        log.info("總條數 ------> " + page.getTotal());
        log.info("當前頁數 ------> " + page.getCurrent());
        log.info("當前每頁顯示數 ------> " + page.getSize());
        log.info("數據 ------> " + page.getRecords());
        return Result.successJson(page);
    }
 
 
   。。。。。。。省略代碼,具體代碼請前往github查看
 
}
複製代碼

能夠把一些通用的CRUD方法寫在這些基礎類中,在咱們有了基礎的這些類之後,咱們自動生成的代碼並無在生成的時候繼承咱們這些定義好的基礎類,因此咱們要修改一下CodeGenerator工具類以便在生成的時候就繼承,在CodeGenerator的策略配置中添加如下代碼就能夠了

//繼承自定義的controller,service,impl,dao
strategy.setSuperControllerClass("com.ywh.common.base.BaseController");
strategy.setSuperServiceClass("com.ywh.common.base.BaseService");
strategy.setSuperServiceImplClass("com.ywh.common.base.BaseServiceImpl");
strategy.setSuperMapperClass("com.ywh.common.base.BaseDao");
複製代碼

測試用例

咱們上面添加了基礎類和分頁插件之後,測試一下是否是好用的,把以前生成的Controller等文件刪除也好,把myBatisPlus.properties中的是否覆蓋文件設置成true也行,從新生成代碼而後經過postman測試咱們的查詢,分頁查詢,添加數據等等好很差用。

分頁查詢

能夠看到我有三條數據,可是我規定了當前頁只顯示一條數據,分頁查詢已經生效了,其餘方法我這裏就不測試了。

相關文章
相關標籤/搜索