使用本框架作為開發項目,必須遵守以下規范.
# 開發工具強制統一
- 前端: 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部署