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测试咱们的查询,分页查询,添加数据等等好很差用。

分页查询

能够看到我有三条数据,可是我规定了当前页只显示一条数据,分页查询已经生效了,其余方法我这里就不测试了。

相关文章
相关标签/搜索