转载

SpringBoot2.1版本的个人应用开发框架 - 实现基础controller、service、前端封装返回json体等

本篇作为SpringBoot2.1版本的个人开发框架 子章节,请先阅读 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测试我们的查询,分页查询,添加数据等等好不好用。

SpringBoot2.1版本的个人应用开发框架 - 实现基础controller、service、前端封装返回json体等

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

原文  https://juejin.im/post/5caee8476fb9a06856567a92
正文到此结束
Loading...