基于SpringBoot的0代码全自动构建中小型项目

原创 陈 浩翔  2018-09-11 18:43  阅读 80 次

简介

spring-boot-quick-project-fars全名为spring-boot-quick-project-front-and-rear-separation
是一基于SpringBoot,MyBatis等开源框架快速构建CSD(Controller-Service-DAO)层的项目,用于快速搭建中小型的API、RESTful API项目。使用简单,运行稳定快捷,摆脱重复的劳动,专注业务代码的编写。
下面是一个简单的视频Demo,基于本项目可以在短短几分钟内实现一套简单的API,0代码编写,实现单表的任意增删改查操作。

演示视频

YouTube
点击图片打开演示视频,打不开的需要翻墙

特征

  • 最佳实践的项目结构、配置文件、精简的POM
  • 统一响应结果封装及生成工具
  • 统一异常处理
  • 简单的接口签名认证
  • 常用基础方法抽象封装
  • 使用Druid Spring Boot Starter 集成Druid数据库连接池与监控
  • 使用FastJsonHttpMessageConverter,提高JSON序列化速度
  • 集成MyBatis、通用Mapper插件、PageHelper分页插件,实现单表业务零SQL
  • 提供代码生成器根据表名生成对应的Entity、Mapper、MapperXML、Service、ServiceImpl、Controller等基础代码
  • Controller模板默认提供POST和RESTful两套,根据需求在application-init.properties配置文件中自己配置project.controller.ftl.model,默认使用POST方式的模板。
  • 代码模板可根据实际项目的需求来扩展,由于每个公司业务都不太一样,所以只提供了一些比较基础、通用的模板,主要是提供一个思路来减少重复代码的编写。
  • 在实际项目的使用中,可以根据公司业务的抽象编写大量的模板。另外,使用模板也有助于保持团队代码风格的统一

快速开始

  1. 克隆项目到本地
  2. src/resoucres下的application-dev.properties,application-init.properties进行配置,主要是JDBC,项目包名等配置
  3. src/test包内的代码生成器CodeAuthGenerator中的main测试方法进行配置,主要是配置需要生成的表名称,根据表名来生成代码
  4. 如果只是想测试的话,可以使用src/test/resources目录下的sq-user.sql,否则忽略该步
  5. 输入表名,运行CodeAuthGenerator.main()方法,生成基础代码(可能需要刷新项目目录才会出来)
  6. 根据业务在基础代码上进行扩展
  7. 对开发环境配置文件application-dev.properties进行配置,启动项目即可。

开发建议

  • 表名,建议使用小写,多个单词使用下划线拼接
  • Entity内成员变量与表字段数量对应,如需扩展成员变量(比如连表查询)建议创建DTO,否则需在扩展的成员变量上加@Transient注解,详情见通用Mapper插件文档说明
  • 建议业务失败直接使用ServiceException("message")抛出,由统一异常处理器来封装业务失败的响应结果,比如throw new ServiceException("该手机号已被注册"),会直接被封装为{"code":400,"message":"该手机号已被注册"}返回,无需自己处理,尽情抛出
  • 需要工具类的话建议先从apache-commons-*guava中找,实在没有再造轮子或引入类库,尽量精简项目
  • 开发规范建议遵循(阿里巴巴Java开发手册)
  • 建议在公司内部使用ShowDocSpringFox-Swagger2RAP等开源项目来编写、管理API文档

项目中依赖的部分开源项目

XDoc 快速文档构建框架

功能

基于java注释生成接口文档
注释支持扩展
接口框架支持扩展
默认支持markdown和离线/在线html等格式的文档
默认支持spring mvc规范
默认支持spring-boot直接内嵌启动

注意事项

在Controller层的@RequestMapping注解中的值,不能以"/"开头,否则生成的自动文档无法进行在线测试
例如:@RequestMapping("/user")需要写成@RequestMapping("user")
另外,不能在配置文件中配置spring.resources.add-mappings=false
生成环境下开启了XDoc,可能会造成jar包稍微大一些
如Controller中方法参数为POJO对象(例如User对象),则使用XDoc传值测试比较麻烦
如果需要测试,则进行传JSON字符串,并且在方法的对象前添加RequestBody注解

    @PostMapping("add")
    @ResponseBody
    public ResultModel add(@RequestBody User user) {
        userService.insert(user);
        return ResultModel.success();
    }

经过测试发现,该种方法无法实现使用XDoc传输对象的JSON字符串测试。
XDoc前端的测试会将对象当做String进行传输
例如:
在测试中 接口地址: user/add,在XDoc接口进行传值

{
    "username": "123456",
    "password": "123456",
    "salt": "12555",
    "age": 21,
    "status": 1
}

例如该图

在XDoc的测试中,会进行一个赋值,并且将参数名称带上,作为key=value传递到Controller层的方法上。
那么在fastJson进行解析的时候得到的字符串是:

user={    "username": "123456",    "password": "123456",    "salt": "12555",    "age": 21,    "status": 1}

所以会出现下面的异常

nested exception is com.alibaba.fastjson.JSONException: syntax error, expect {, actual ident, pos 0, fastjson-version 1.2.49

暂时未进行XDoc框架的其他Bug测试,如果后期有时间,可能会对于XDoc进行一些改造

访问

本地运行项目后,直接在浏览器中输入http://localhost:8080/xdoc/index.html访问即可
演示
点击最右边的测试
演示
可输入参数进行测试

参考项目

spring-boot-api-project-seed

其他

如果需要新功能,欢迎大家提Issues,会考虑进行加入。
感谢大家 Star & Fork 的支持。

本项目地址

https://github.com/chenhaoxiang/spring-boot-quick-project-all

anyShare分享到:
本文地址:http://chenhaoxiang.cn/2018/09/11/1842/
关注我们:请关注一下我们的微信公众号:扫描二维码会Java的公众号,公众号:UIFuture
版权声明:本文为原创文章,版权归 陈 浩翔 所有,欢迎分享本文,转载请保留出处!

发表评论


表情