基于SpringBoot+Vue3开发的轻量级快速开发脚手架
🍁项目简介
一个通用的前、后端项目模板
一个快速开发管理系统的项目
一个可以生成SpringBoot+Vue代码的项目
一个持续迭代的开源项目
一个程序员的心血合集
度过严寒,终有春日;挺过酷暑,必有丰收。
GitHub地址
Gitee地址
文档地址(更新中)
演示地址(储备中)
🎈前言
本项目大方向遵循阿里巴巴编码规范,其中有些设计可能因作者习惯原因,有些不一样,这里就不强制一致了。下面罗列一下项目常用到的一些设计规范。
🛢数据库设计规范
数据库暂以单表单库的规则设计,如后期肯定会有分库分表,可在设计前期根据自己需求调整。
表设计
表命名一般由 模块前缀简写
+'_'
+ 功能名
例如
- 系统管理-字典类型 :
sys_dict_type
- 博客中心-文章标题:
blog_title
- 小程序-用户管理:
applet_user
一个表中一般需要包含基础字段和部分需要的通用字段,基础字段和通用字段定义规则如下,代码生成工具中有部分直接根据基础字段的编码处理了,如需改动,可对应修改生成工具源码。
基础字段
字段编码 | 字段名称 | 字段类型 | 字段描述 |
---|---|---|---|
id | 主键ID | BIGINT(20) | 默认自动递增(AUTO_INCREMENT) |
create_id | 创建人id | BIGINT(20) | 新增时自动填充 |
create_time | 创建时间 | DATETIME | 新增时自动填充 |
update_id | 修改人id | BIGINT(20) | 新增、修改时自动填充 |
update_time | 更新时间 | DATETIME | 新增、修改时自动填充 |
常用字段
字段编码 | 字段名称 | 字段类型 | 字段描述 |
---|---|---|---|
status | 状态 | TINYINT(1) | Java实体中,转为boolean,0:无效;1:生效 |
remark | 备注 | VARCHAR(500) | 前端以文本域的形式展示填写 |
sort_num | 排序 | BIGINT(20) | 展示以从小到大正序排序 |
is_delete | 是否删除 | TINYINT(1) | 默认当作逻辑删除字段,使用Mybatis Plus的@TableLogic注解 |
version | 数据版本号 | BIGINT(20) | 默认当作乐观锁字段,使用Mybatis Plus的@Version注解 |
树表字段
生成代码时,修改、编辑不要选择此字段,已默认处理
#if($table.tree) parentId: '', ancestors: '', ancestorsArray: [], #end
字段编码 | 字段名称 | 字段类型 | 字段描述 |
---|---|---|---|
parent_id | 父节点ID | BIGINT(20) | 父节点ID,顶级节点,此字段设为0 |
ancestors | 祖级列表 | VARCHAR(255) | 祖级列表,方便页面回显,数据格式如[100,101,201] |
🚀后端设计规范
模块定义
可根据实际业务拆分模块,建议同一个功能模块拆分成一个,例如用户中心模块、博客管理模块、代码生成模块等。
其中比较特殊的有一下两个模块
- 通用工具类模块:
maple-admin-common
- Rest统一接口模块:
maple-admin-rest
其中maple-admin-rest
为统一接口提供模块,只做差异化接口提供,尽量不做业务处理,然后统一调用功能模块的Service接口。
接口模块定义
这里以系统模块为例
maple-admin-system ------------ 模块名称
├─src
│ └─main
│ ├─java
│ │ └─com.maple.system ------------ 模块目录
│ │ ├─bean ------------ 实体类
│ │ ├─mapper ------------ mapper类
│ │ ├─service ------------ service接口类
│ │ │ └─impl ------------ service接口实现类
│ │ └─vo
│ │ ├─model ------------ 对外实体Model类
│ │ └─query ------------ 请求参数对象
│ └─resources
│ └─mapper ------------ mapper的xml文件
└─pom.xml ------------ maven配置文件
Rest接口模块定义
maple-admin-rest ----------- 模块名称
├─src
│ └─main
│ ├─java
│ │ └─com.maple.rest ----------- 模块目录
│ │ ├─aop ----------- AOP切面配置
│ │ ├─config ----------- 启动项配置
│ │ ├─controller ----------- Controller接口
│ │ │ ├─common ----------- 通用接口
│ │ │ └─manage ----------- 管理模块接口
│ │ │ ├─system ----------- 管理模块-系统设置接口
│ │ │ ├─tool ----------- 管理模块-工具类接口
│ │ │ └─usc ----------- 管理模块-系统用户接口
│ │ ├─job ----------- 定时任务
│ │ └─Application.java ----------- 项目启动类
│ └─resources ----------- 资源目录
│ └─WEB-INF
│ └─resources
└─pom.xml ----------- Maven配置文件
对象字段定义
字段定义和数据库字段对应关系如下
数据库字段 | Java对象字段 |
---|---|
tinyint(1) | Boolean |
int, tinyint, smallint, mediumint | Integer |
char, varchar, nvarchar, varchar2, tinytext, text, mediumtext, longtext | String |
datetime, time, date, timestamp | Date |
bigint | Long |
float | Float |
double | Double |
decimal | BigDecimal |
其它类型 | 暂未定义 |
生成代码时可以配置是否集成基础字段对象com.maple.common.config.bean.BaseEntity
。
其中BaseEntity
对象包含上述数据库设计中的基础字段
@Data
public class BaseEntity implements Serializable {
@TableId(type = IdType.AUTO)
protected Long id;
@ApiModelProperty("创建人id")
@TableField(value = "create_id", fill = FieldFill.INSERT)
private Long createId;
@ApiModelProperty("创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty("更新人id")
@TableField(value = "update_id", fill = FieldFill.INSERT_UPDATE)
private Long updateId;
@ApiModelProperty("更新时间")
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
}
实体类转换( 必须 )
这里的bean为数据库一一对应的对象,默认规则设计上不做任何侵入,只在接口模块内部使用。
对外部接口提供数据时,统一转换为Model对象。
转换工具类:com.maple.common.util.TransformUtils
使用方式:
/**
* 单个对象之间转换
*/
public static <T> T map(Object source, Class<T> destinationClass) {
if (source == null) {
return null;
}
return MAPPER.map(source, destinationClass);
}
/**
* 集合对象之间转换
*/
public static <T> List<T> mapList(Collection<?> sourceList, Class<T> destinationClass) {
List<T> destinationList = new ArrayList<>();
for (Object sourceObject : sourceList) {
destinationList.add(MAPPER.map(sourceObject, destinationClass));
}
return destinationList;
}
// 使用方式
UserModel model = TransformUtils.map(user, UserModel.class);
List<UserModel> modelList = TransformUtils.mapList(user, UserModel.class);
🛸前端设计规范
前端就不多说了,本身也是用了现有的框架,详细见框架本身源码
管理端框架:vueNextAdmin
maple-web
maple-web
├─public ---------- 公开文件
└─src
├─api ---------- 接口地址
│ └─system ---------- 系统管理接口
├─assets ---------- 应用程序使用的静态资源文件
├─components ---------- 应用程序的公共组件
├─directive ---------- Vue的自定义指令
├─i18n ---------- 放置国际化多语言配置文件
├─layout ---------- 项目的布局.vue模板
├─router ---------- 应用程序的路由配置
├─stores ---------- 应用程序的状态管理工具
├─theme ---------- 应用程序的主题配置
├─types ---------- 数据类型
├─utils ---------- 自己封装的一些全局性的js功能文件
└─views ---------- 应用程序的页面