使用本框架作为开发项目,必须遵守以下规范.
# 开发工具强制统一
- 前端: VS Code
- 后端: IntelliJ IDEA
- 数据库设计: CHINER
- 数据库客户端: DBeaver
# IDEA 强制安装插件
- Lombok:自动生成get set等方法
# IDEA 推荐安装插件
- Maven Helper: maven 依赖排查
- Free Mybatis plugin: mybatis xml 快速切换
- RestfulTool: 接口查找
- Alibaba Java Coding Guidelines : 阿里代码编码指南
- Git commit Template: git 提交消息模板
- GitToolBox: Git工具
# VS Code 推荐安装插件
* [Iconify IntelliSense](https://marketplace.visualstudio.com/items?itemName=antfu.iconify)\- Iconify 图标插件
* [windicss IntelliSense](https://marketplace.visualstudio.com/items?itemName=voorjaar.windicss-intellisense)\- windicss 提示插件
* [I18n-ally](https://marketplace.visualstudio.com/items?itemName=Lokalise.i18n-ally)\- i18n 插件
* [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur)\- vue 开发必备 (也可以选择 Volar)
* [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)\- 脚本代码检查
* [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)\- 代码格式化
* [Stylelint](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint)\- css 格式化
* [DotENV](https://marketplace.visualstudio.com/items?itemName=mikestead.dotenv)\- .env 文件 高亮
# 约定
- 源码、jdk、mysql、redis、rabbitmq、nacos、seata等存放路径禁止包含中文、空格、特殊字符等。
```
正例:
D:/projects/lamp-cloud
D:/projects/lamp-boot
D:/projects/lamp-util
D:/projects/tools/nacos_121
D:/projects/tools/redis
D:/projects/tools/seata
反例:
D:/Program Files/lamp-cloud
D:/Program Files/lamp-boot
D:/Program Files/lamp-util
D:/Program Files/视频配套项目软件_window版(配置文件被群主优化过)/nacos_121
D:/Program Files/视频配套项目软件_window版(配置文件被群主优化过)/redis
D:/Program Files/视频配套项目软件_window版(配置文件被群主优化过)/seata
```
# 数据库设计 (参考c_user表)
* 使用CHINER来设计表结构
* 必须显式指定`主键`, 勿用复合主键. 主键的命名统一为: `id`
* 任何表至少包含3个字段: bigint id、 datetime create_time、bigint created_by (可以自行修改 EntityType)
* 关于状态字段根据业务含义命名为: state、status
- 如(隐藏、显示),(是、否),(可用、不可用)、(启用、禁用) 等字段用 state
- 如 OrderedStatus, ShippingStatus,ReceiptedStatus 等字段用 status
* 界面上要显示成树形结构的表, 至少需要4个字段: id、parent_id、label、sort_value
* 表中有以下含义的字段, 尽可能的采用同样的命名规则:
- 名称: name (树型结构用: label)
- 编码: code
- 描述: describe_
- 最后修改数据的用户ID: updated_by
- 最后修改数据的时间: update_time
- 是否内置数据: readonly_
* POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行 字段与属性之间的映射。
* 主键索引名为 pk_字段名;唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。 说明:pk_ 即 primary key;uk_ 即 unique key;idx_ 即 index 的简称
* 不得使用外键与级联,一切外键概念必须在应用层解决
* 不用存储过程
* 数据库名、表名、字段名统一使用小写 + `_`
* varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长 度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。
* 表名命名规则: “b_业务名称_表的作用” 、 “c_业务名称_表的作用” . `b_ ` 表示业务表, `c_`表示核心表(权限系统的一整套)
* 表、字段 必须加注释
* 表名注释支持换行,第一行会被视为表名。 表的介绍请换行填写。
* 字段的第一行视为字段简介,详细介绍和枚举类型请换行
* 所有字段尽量根据业务设置合理的`缺省值`,尽量避免表中出现 NULL值
* 当字段为外键时,字段名为: 关联表\_id, 注释需要在字段注释基础上,换行加上`#关联表表名`来说明关联的哪张表。(注意英文#号)
* 当字段为枚举时,需按照下面当格式添加注释:
~~~
注释模板1: 注释内容 #枚举类名{枚举值英文名:"枚举值英文注释"; ...}
注释模板2: 注释内容 #枚举类名{枚举值英文名:val,"枚举值英文注释"; ...}
注释模板3: 注释内容 #枚举类名{枚举值英文名:val,"枚举值英文注释",val2; ...}
注释模板4: 注释内容 #{枚举值英文名:"枚举值英文注释"; ...}
其中枚举类名可以没有,如果没有,则生成的枚举值名为:表对应的实体名 + 当前字段对应的属性名(首字母大写) + Enum
枚举值例子:
文件类型 #FileType{PAN:云盘数据;API:接口数据}
数据类型 #DataType{DIR:1,目录;IMAGE:2,图片;VIDEO:3,视频;AUDIO:4,音频;DOC:5,文档;OTHER:6,其他}
数据类型 #{DIR:目录;IMAGE:图片;VIDEO:视频;AUDIO:音频;DOC:文档;OTHER:其他}
~~~
* 当字段需要使用Echo模块回显功能时, 需要按照下面当格式添加注释
~~~
模版1:
@Echo(api = ORG_ID_CLASS, beanClass = Org.class)
模版2:
@Echo(api = DICTIONARY_ITEM_CLASS, dictType = DictionaryType.NATION)
模版3:
@Echo(api = STATION_ID_CLASS)
~~~
* 其他更多约束尽量遵守阿里规范
# 后端
* 详细的代码注释: 类、字段、方法、参数上必须加上doc注释, 方法内部适当的位置加上行注释和块注释. doc注释标明 作者(@author)、创建时间(@date)等.
* 使用Mybatis-plus 相关查询接口时, 使用系统封装的 Wraps , 而非mp官方的 Wrappers
* 在xml写sql 需要使用模糊查询时, 使用自定义类型处理器: `fullLike` , 会自动给你拼接%
如: name like #{name, typeHandler=fullLike}
* 尽量多的使用jdk8 + 新特性
* 必须显示的使用 泛型
* 暴露给前端的接口参数不宜过多, 使用DTO将必要的字段暴露给前端.避免前端大海捞针!
如: 保存接口, id、createTime、createUser、status 等字段不应该显示在swagger文档的入参里面, 而是由后台自动赋值.
* 暴露给前端的接口,一定要在swagger文档上体现合理的注释!
* 其他更多约束尽量遵守阿里规范
* 常量的复用层次有五层:跨服务共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。
1) 跨服务共享常量:放置在lamp-commom模块中,constant 目录下。
2) 应服务共享常量:放置在lamp-xxx-entity中, constant 目录下。
3) 子模块共享常量:即在当前模块的 constant 目录下。
4) 包内共享常量:即在当前包下单独的 constant 目录下。
5) 类内共享常量:直接在类内部 private static final 定义。
* 集合初始化时,指定集合初始值大小。
说明:HashMap 使用 HashMap(int initialCapacity) 初始化,如果暂时无法确定集合大小,那么指定默 认值(16)即可。 正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即 loader factor)默认 为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)。
# 前端
* 业务代码都写在`src/views/lamp`下面, 建包规则跟 项目的菜单层级保持一致. 包名跟菜单的路由uri保持一致(大小写也要一致)
如: 用户管理的路由为: `#/user/user` , 代码就放在`src/views/lamp/user/user/Index.vue`
* 其他更多约束尽量遵守阿里规范
# 提交代码规范
1. 每次提交尽量按功能点或bug提交代码,哪怕是只修改了一行代码,一个字母,尽量不要一次性提交过多的功能和bug等
2. 及时拉取、及时提交、及时推送、及时合并;
3. 提交代码前,记得勾选IDEA提交框中的`Reformat code`、`Rearrage code`、`Optimize imports`选项
3. 提交代码时按照以下模版进行注释
type: 用于说明 commit的类别,只允许使用下面几个标识:
fix:修补bug
hotfix:紧急修复bug
chore:构建过程或辅助工具的变动
docs:文档(documentation)
feat:新功能(feature)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
style: 仅仅修改了空格、缩进等,不改变代码逻辑(不影响代码运行的变动)
test:增加测试
revert:回滚到上一个版本;
perf:改善性能和体现的修改
build:改变构建流程,新增依赖库、工具等(例如webpack修改);
- scope of this change : 本次变更范围
用于描述改动的范围,格式为项目名/模块名,例如: node-pc/common rrd-h5/activity,而we-sdk不需指定模块名。如果一次commit修改多个模块,建议拆分成多次commit,以便更好追踪和维护。
- short description : 简要说明
- Long description : 详细说明
- breaking changes : 不兼容变动
break changes指明是否产生了破坏性修改,涉及break changes的改动必须指明该项,类似版本升级、接口参数减少、接口删除、迁移等。
- close issue : 关闭指定Issue
- 简介
- 会员版
- 3.x和4.x的区别
- 新手必读
- 如何高效提问
- 项目地址
- 项目截图
- 架构介绍
- 开发规范
- 租户模式介绍
- lamp-web和lamp-web-plus的区别
- lamp-cloud和lamp-boot区别
- 免费视频&软件下载
- 文档反馈
- lamp-cloud
- 服务介绍
- 环境要求
- 工程导入
- nacos启动(单机版)
- nacos启动(集群版)
- 将配置文件导入Nacos
- seata启动(单机版)
- DATASOURCE模式启动(会员版)
- SCHEMA模式启动
- COLUMN模式
- NONE模式
- lamp-web启动
- lamp-web生产部署
- lamp-web-plus启动(会员版)
- lamp-web-plus生产部署
- lamp-boot
- 环境要求
- 工程导入
- DATASOURCE模式启动(会员版)
- SCHEMA模式启动
- COLUMN模式启动
- NONE模式启动
- lamp-web启动
- lamp-web生产部署
- lamp-web-plus启动(会员版)
- lamp-web-plus生产部署
- 功能介绍
- 租户设置
- 数据源配置(会员版)
- 租户管理
- 超级用户
- 工作台
- 通知公告
- 组织管理
- 机构管理
- 岗位管理
- 用户管理
- 资源中心
- 消息中心
- 短息模版
- 短信中心
- 附件管理
- 流程管理
- 流程部署
- 模型管理
- 系统设置
- 菜单管理
- 角色管理
- 字典管理
- 地区管理
- 参数管理
- 操作日志
- 登录日志
- 在线用户
- 应用管理
- 网关管理
- 限流规则
- 组织访问
- 开发者管理
- 定时任务
- 接口文档
- Nacos
- 服务监控
- 数据库监控
- 缓存监控
- zipkin监控
- SkyWalking监控
- 常用配置
- 如何保证我的代码能更新到最新代码
- 序列化和反序列化
- 修改日志级别
- 文件上传&下载&预览
- 修改租户模式
- 分页
- 导入导出
- 请求放行(忽略token&忽略URI权限&忽略租户编码)
- 异常处理
- 全局返回
- 参数校验(会员版)
- 系统日志
- 自研权限认证(URI、按钮、菜单)
- 数据权限(旧)
- 数据库配置
- Mybatis配置
- 更多数据库/数据源/Mybaits配置
- Redis(缓存)配置
- RabbitMq配置
- 灰度发布
- 上手开发
- 表结构整理
- 项目结构&依赖&调用流程介绍
- 生成一个新服务
- 生成后端代码
- 生成前端lamp-web代码
- 生成前端项目lamp-web-plus代码
- 跨域处理
- Swagger文档调试技巧
- FeignClient接口调用
- 多租户实现原理
- 分布式事务
- Zipkin配置(过时)
- SkyWalking配置
- 代码生成器和自动回显组件使用介绍
- lamp-util原理解析
- 全局注解(lamp-annotation)
- 核心包(lamp-core)
- 自动回显(lamp-echo-starter)
- 权限控制(lamp-security-starter)
- 当前登录用户信息(lamp-jwt-starter)
- 缓存(lamp-cache-starter)
- SpringBoot全局配置(lamp-boot-util)
- SpringCloud全局配置(lamp-cloud-starter)
- 数据源&持久层配置(lamp-databases)
- 对象属性复制(lamp-dozer-starter)
- 操作日志(lamp-log-starter)
- 消息队列(lamp-mq-starter)
- 在线文档(lamp-swagger2-starter)
- 前后端表单统一验证(lamp-validator-starter)
- 防止Xss攻击(lamp-xss-starter)
- 生产部署
- 部署前言
- jar部署