同步操作将从 西门长海/spring-boot-template 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
vue
前端项目和截图,请移步vue-admin-template
多个spring boot前后端分离管理系统
开发经验总结而成,使用restful
风格API
,
包含角色
权限
代码生成
增删改查示例
,
集成mybatis plus
无需书写sql
即可实现大部分接口。
项目功能完整,结构特别简单易懂,未做多余封装,上手难度极地。可作为模板项目使用,大大提高开发效率。
特别适合中小型项目
、新手
和个人开发者
参考及使用,一天开发一个项目不是梦。
lombok
插件)名称 | 介绍 |
---|---|
Spring Boot 2.2.1.RELEASE | 无 |
mybatis-plus 3.2.0 | 用着超爽的mybatis 插件,可在baseService 中实现常用的数据库操作 |
jwt-token | 使用jwt 生成token ,实现登录认证 |
swagger 2.9.2 | 生成项目文档,供app和前端使用 |
template-api
├── template-generator -- 代码生成器
│ └── Generator.java -- 运行此java生成代码
└── template-main -- 业务模块
├── base包 -- 常用父类
│ ├── BaseEntity.java -- 包含一个id,所有Entity的父类
│ ├── BaseLogEntity.java -- 继承BaseEntity,包含createBy,createTime,updateBy.updateTime四个日志相关的field
│ ├── BaseService.java -- 继承自mybatis plus,包含常用的增删改查方法,具体使用参考mybatis plus文档
│ └── BaseSvo.java -- svo为search vo简写,用于接收前端传递查询条件,包含pageNum和pageSize
├── config包 -- 项目配置
│ ├── @Auth.java -- 此注解用于实现权限验证,添加到@Auth("permission")到controller方法鉴权
│ ├── @NoAuth.java -- 默认所有的controller方法需要登录,使用这个注解排除登录,例如登录注册接口
│ ├── MybatisPlusConfig.java -- mybatis plus配置文件,分页在此配置
│ ├── MyMetaObjectHandler.java -- mybatis plus自动填充功能,可以自动插入createBy,createTime,updateBy.updateTime值
│ ├── AuthAspect.java -- aop实现鉴权,和访问日志
│ ├── MvcConfig.java -- spring mvc常用配置,包含跨域,时间格式化等等
│ ├── ProjectParam.java -- 此项目的配置文件映射,自动读取application.properties中的私有配置
│ └── Swagger2.java -- Swagger2配置文件
├── controller包 -- 使用restfull风格api
│ ├── AccountController.java -- 账户相关,登录、修改密码等
│ ├── DeptController.java -- 部门,树形结构的参考此模块,自动转换为前端通用数据结构
│ ├── DeviceController.java -- 增删改查示例模块
│ ├── PermissionController.java -- 权限
│ ├── RoleController.java -- 角色
│ ├── UserController.java -- 用户
│ └── 角色 权限 用户模块因为 多对多中间表 问题,写了好多sql,其他模块使用通用方法基本都能解决
├── entity包 -- 和数据库对应,继承BaseEntity.java或者BaseLogEntity.java
├── exception包 -- 异常类
│ ├── MyException.java -- 常见的异常,例如参数校验,是否存在等抛出此异常,前端httpstatus自动为400
│ ├── NoAuthException.java -- 未登录访问接口抛出此异常,前端httpstatus自动为401
│ └── UnauthorizedException.java -- 登录但是无具体权限抛出此异常,前端httpstatus自动为403
├── mapper包 -- mybatis mapper
├── service包 -- 服务类,继承BaseService.java
├── svo包 -- svo为search vo简写,用于接收前端传递查询条件,继承BaseSvo.java
├── util包 -- 工具类,包含BCrypt密码加密、树形结构转换、jwt token生成,日期工具,获取当前用户工具,json工具等
└── vo包 -- 相当于dto包,集成字entity,用于传递entity中不包含的参数给前端
Intellij idea
或者Eclipse
导入maven
项目mysql
数据库,执行项目根目录/sql/db.sql
application-dev.properties
中的数据库连接参数template-main
中的TemplateApplication.java
即可启动项目 (请运行前端项目查看实际界面效果)
vue-admin-template
项目名称
、包名
、artifactId
、modules
、Dockerfile
、
代码生成器
等均为template
,建议按照自己的项目名称修改,也可以不改。#进入项目目录
cd template-api
#打包(可在本地打包,提交jar后,到服务器运行docker命令)
mvn install
#进入Dockerfile所在文件夹
cd template-main
#docker打包镜像
docker build -t template-api:latest .
#启动docker容器,可使用-e SPRING_PROFILES_ACTIVE=${env}指定环境,不指定则默认为dev
docker run -itd --name template-api -e SPRING_PROFILES_ACTIVE=dev template-api:latest
配置参考
参考我的文章 最优雅的Docker+Jenkins pipeline部署Spring boot项目
#进入项目目录
cd template-api
#打包
mvn install
#linux 在jar所在目录执行
nohup java -jar template-api.jar --spring.profiles.active=dev >log.txt &
#windows 在jar所在目录执行
java -jar template-api.jar --spring.profiles.active=dev
特别强大的mybatis工具,封装了大量通用方法,写很少的sql即可完成一个项目。
详细文档MyBatis-Plus文档
代码生成器由mybatis-plus提供,详情请参考 mybatis-plus 代码生成器
文档配置文件com.step.template.main.config.Swagger2
只有dev
和test
环境会生成文档,可以修改配置文件的@Profile注解自定义
文档默认访问地址http://localhost:8020/swagger-ui.html
未添加@NoAuth
的api需要设置token后才可访问
@NoAuth
-- 默认所有的controller
方法需要登录,使用这个注解排除登录,例如登录注册接口@Auth
-- 此注解用于实现权限验证,添加到@Auth("permissionName")
到controller方法中
鉴权permissionName
建议权限值采用user:query,user:edit
类似的形式,参考数据库中的permission
表com.step.template.main.config.AuthAspect
中会拦截所有controller
方法,根据注解进行相应的处理
用户表
和权限表
用户
可以有多个权限
,一个权限
可以分配给多个用户
,所以是多对多
关系。多对多
会产生关联表,表示如下:这种设计已经可以满足小型管理系统的需求,使用和开发都特别简单。
但是如果用户数增大,运营人员需要为每个用户分配权限,会浪费大量的精力,而且容易出错。
用户多,但是用户的角色
比如经理
、运维
等却很少,所以应该增加一层角色。
取消了用户
和权限
的直接关联,改为通过用户关联角色
、角色关联权限
的方法来间接地赋予用户权限。
当新增用户时只需分配已有的角色,大大减少运营人员工作量和出错率。
三张表分别为多对多关系
生成关联网之后的结构如下
工程结构
中项目结构介绍#本项目成功时返回结果如下
{
"name": "姓名",
"deptName": "部门名称"
}
#失败时
{
"name": "姓名",
"deptName": "部门名称"
}
#而不是
{
"error": 0,
"msg": "success",
"data": {
"name": "姓名",
"deptName": "部门名称"
}
}
com.step.template.main.util.ScopeUtil
中可获取当前用户
使用构造器注入,避免在private
字段上写@Autowired
,这么写idea会提示警告
Field injection is not recommended
。构造器注入配合lombok写法很简洁。
BaseService
提供字段唯一性检测,参考userService
里的phone
唯一检测
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。