Skip to content

ifrankwang/spring-boot-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

spring-boot 示例项目

说明

本示例是一个普通的spring-boot-web项目,集成了Swagger2QueryDslMyBatis以及spring-boot-web中自带的Hibernate。详情请查看项目中的注解。启动项目后,在 Swagger-UI 中查看接口。

注意

  1. 项目需要安装lombok插件!!!
  2. 创建数据库的.sql文件在/files文件夹下,请自行创建数据库后并查看/src/main/resources/application.yml中数据源地址是否需要修改后再进行测试
  3. resources下带-dev.yml文件表示测试环境下的配置;带-prod表示生产环境下的配置
  4. MyBatis相关的接口类在me.frank.demo.mapper包内创建
  5. MyBatis相关的XML文件在resources下的me/frank/demo/mapper文件夹下创建
  6. 需要在Swagger-UI中显示的Controller类需要标注@Api,具体使用方法参考BaseController
  7. 需要简化POJO类的显示,需要标注@Data,具体使用方法参考AppResponse
  8. 双向引用的实体类需要在@ToString@EqualsAndHashCode里排除引用的类对象,以免造成系统错误,具体使用方法参考AppUser
  9. 代码尽量符合阿里Java代码规约,EclipseIntelliJ都有相应的插件可以安装

启动步骤:

  1. 执行maven命令生成实体类映射类:mvn clean generate-resources
  2. 执行maven命令运行项目:mvn spring-boot:run

配置

  1. 系统相关的参数配置在application.properties文件中,相应的配置都已有注释描述
  2. 修改项目名的时候注意修改server.context-path参数
  3. 修改包名的时候注意修改mybatis.type-aliases-package, mybatis.mapper-locations参数和MethodLogger中的包名
  4. 修改数据库源的时候注意修改spring.datasource, hikari.datasource相应的参数
  5. spring.datasource, hikari.datasource的部分参数需要保持一致,具体参考现有的配置

项目结构

注:以下包名的前缀统一为me.frank.demo

  1. aspect包中存放切面操作相关类MethodLogger类会在ControllerService方法执行前在控制台中输出方法名
  2. config包中存放项目的配置类
  3. controller包中存放项目的控制层类
  4. dto包中存放数据传输对象
  5. entity包中存放实体类,对应数据库中的表
  6. enums包中存放枚举类,一般和实体类的状态属性相关
  7. exception包中存放异常类,注意处理请求时,有业务异常的,抛出的ServiceException会被自动捕获,并返回相应的错误信息给前端。有需要抛出的业务异常在ServiceException中添加
  8. mapper包中存放MyBatis对数据库表操作接口,不需要实现,注意方法名和相应的*Mapper.xml文件里的操作id保持一致
  9. properties包中存放项目配置类,包含*.yml文件相对应的类以及一些常量类
  10. query包中存放更复杂的QueryDsl查询接口
  11. repo包中存放JPA的基本查询接口,需要继承同包下的Repository接口,会根据方法名自动生成查询SQL,不需要实现接口
  12. security包中存放和权限、安全相关的Filter
  13. service包中存放业务相关类
  14. util包中存放工具类

项目规范

HTTP 请求设计

  1. GET 请求用于获取资源
  2. PUT 请求用于完全修改资源
  3. PATCH 请求用于部分修改资源
  4. POST 请求用于新增资源
  5. DELETE 请求用于删除资源
  6. 请求 URL 中不应包含 get, create, delete, update 等操作词
  7. 请求 URL 中出现多个单词应用 kebab-case(横杠式命名风格),如:`recharge-record

Controller

  1. me.frank.demo.controller包中创建Controller
  2. 所有接口类的Endpoint需以API_PREFIX起头,可参考BaseController.noAuthTest()
  3. 不需要权限访问的接口,需要加上NO_AUTH_URL,可参考BaseController.noAuthTest()
  4. 所有接口类需要标注@Api(tags = [描述]),可参考BaseController
  5. 所有接口方法需要标注@ApiOperation(value = "[操作]", notes = "[描述]"),可参考BaseController.noAuthTest()
  6. 需要控制访问用户身份的接口,需要加上@PreAuthorize("hasAuthority('[身份]')"),可参考BaseController.authAdminTest()
  7. 所有除操作成功状态外,有返回数据的,都写明返回类型。如果返回类型不是基本类型(String, Integer...),需要在类里面给每个属性标注@ApiModelProperty("[说明]"),可参考BaseController.noAuthTest()
  8. 业务逻辑放在Controller里处理,Service作为相关信息服务,只提供最基础的业务处理,可参考LoginController

Service

  1. me.frank.demo.service包中定义服务接口,如需在Controller里获取到Service拥有的Repository,需要继承RepoAvailable接口,可参考GroupService
  2. me.frank.demo.service.impl包中实现服务接口,命名规则参考现有Service

Repository

  1. me.frank.demo.repo包中创建JPA Repository接口,需要继承同包下的Repository接口

Entity

  1. Entity在数据库存储的状态、类型等为01, 02这类字符串的,在代码中需要用相应的enum来体现
  2. EntityList, Set类型属性都必须初始化

Git Commit

Git commit的时候,按照以下消息规范的范围进行commit。最好不要出现一次commit同时出现多个范围的修改,如:一次commit中新增了接口,同时又修改了配置。

Git Commit 消息

  1. A 新增作为前缀表示新增功能,如A 新增 消息接口
  2. C 配置作为前缀表示系统配置修改,如C 配置 修改数据库连接地址
  3. D 文档作为前缀表示文档相关修改,如D 文档 完善README
  4. F 修复作为前缀表示修复bug,如F 修复 消息接口逻辑错误
  5. M 其他作为前缀表示其他无法归类的修改,如M 其他 删除不必要的文件
  6. O 优化作为前缀表示代码优化,如O 优化 消息接口优化
  7. R 重构作为前缀表示代码重构,如R 重构 消息接口代码重构
  8. S 规范作为前缀表示代码规范相关调整,如S 规范 消息接口代码格式修改
  9. U 更新作为前缀表示根据业务需求调整做的修改,如U 更新 消息接口逻辑修改

前后端协作建议

建议使用石墨协作

About

A showcase of spring-boot

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages