本篇作為SpringBoot2.1版本的個人開發框架 子章節,請先閱讀SpringBoot2.1版本的個人開發框架再次閱讀本篇文章
我們實現了程式碼生成的功能後,對於一個web專案來說,我們還要對返回前端的格式進行一個簡單的封裝Result,所有返回的型別都是統一的格式,以及我們在自動生成的程式碼可以繼承我們自定義的基礎controller等類,便於我們自己擴充套件。
基礎列舉類
在common子模組下的base包下建立基礎的BaseEnum列舉類用來定義描述資訊維護到列舉裡面,儘量不要在程式碼中直接出現魔法值(如一些編碼、中文等,直接常量等),以後的列舉常量類也可以按照這種模式來寫。
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。
package com.ywh.common.utils;
import com.alibaba.fastjson.JSONObject;
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測試一下我們的前端結構體
@RestController
@RequestMapping("ExampleController")
public class ExampleController{
@GetMapping("findAll")
public JSONObject 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類,用於前端傳入引數的接收實體類,我們可以控制當前頁和一頁中顯示幾條資料
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包中建立以下類,封裝如下:
BaseController、BaseService、BaseServiceImpl、BaseDao: 因為都貼出來太長了,剩下具體程式碼可前往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測試我們的查詢,分頁查詢,新增資料等等好不好用。
可以看到我有三條資料,但是我規定了當前頁只顯示一條資料,分頁查詢已經生效了,其他方法我這裡就不測試了。