-- =========== 用户表索引 ===========-- 用户名唯一索引CREATE UNIQUE INDEX uk_username ON sys_user (username);-- 手机号唯一索引CREATE UNIQUE INDEX uk_phone ON sys_user (phone);-- 邮箱唯一索引CREATE UNIQUE INDEX uk_email ON sys_user (email);-- 状态索引(用于快速查询启用的用户)CREATE INDEX idx_status ON sys_user (status);-- 部门ID索引(用于部门用户查询)CREATE INDEX idx_dept_id ON sys_user (dept_id);-- 创建时间索引(用于时间范围查询)CREATE INDEX idx_create_time ON sys_user (create_time);
注释规范
介绍
良好的注释是代码可读性和可维护性的重要保障。注释应该:
核心价值:
注释不是越多越好,而是要在合适的地方写合适的注释。本文档基于项目实际使用情况编写,所有示例均来源于真实代码。
参考: ruoyi-plus-uniapp框架实际代码注释风格
注释基本原则
何时需要注释
必须添加注释的情况:
示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
参考: ruoyi-modules/ruoyi-business/src/main/java/plus/ruoyi/business/base/domain/bo/AdBo.java:15-53
何时不需要注释
不需要添加注释的情况:
错误示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
正确做法:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
注释的黄金法则
Java 注释规范
类注释
格式要求:
2
3
4
5
6
完整示例:
2
3
4
5
6
7
8
9
10
参考: ruoyi-modules/ruoyi-business/src/main/java/plus/ruoyi/business/base/domain/bo/AdBo.java:15-20
规范说明:
不同类型的类注释:
1. Controller 类:
2
3
4
5
6
7
8
9
10
11
12
2. Service 接口:
2
3
4
5
6
7
8
9
参考: ruoyi-modules/ruoyi-business/src/main/java/plus/ruoyi/business/base/service/IAdService.java:12-17
3. Service 实现类:
2
3
4
5
6
7
8
9
10
参考: ruoyi-modules/ruoyi-business/src/main/java/plus/ruoyi/business/base/service/impl/AdServiceImpl.java:18-23
4. 工具类:
2
3
4
5
6
7
8
9
10
5. 配置类:
2
3
4
5
6
7
8
9
10
11
方法注释
格式要求:
2
3
4
5
6
7
完整示例:
2
3
4
5
6
7
参考: ruoyi-modules/ruoyi-business/src/main/java/plus/ruoyi/business/base/service/IAdService.java:18-24
规范说明:
@param 参数名 参数说明不同场景的方法注释:
1. 查询方法:
2
3
4
5
6
7
2. 新增方法:
2
3
4
5
6
7
3. 更新方法:
2
3
4
5
6
7
4. 删除方法:
2
3
4
5
6
7
5. 复杂业务方法:
2
3
4
5
6
7
8
9
10
11
12
6. 带默认实现的接口方法:
2
3
4
5
6
7
8
9
10
字段注释
格式要求:
2
3
完整示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
参考: ruoyi-modules/ruoyi-business/src/main/java/plus/ruoyi/business/base/domain/bo/AdBo.java:48-67
规范说明:
不同类型的字段注释:
1. 普通字段:
2
3
4
5
6
7
8
9
2. 状态字段:
2
3
4
5
6
7
8
9
3. 枚举字段:
2
3
4
5
6
7
8
9
4. 时间字段:
2
3
4
5
6
7
8
9
5. 金额字段:
2
3
4
5
6
7
8
9
6. 关联字段:
2
3
4
5
6
7
8
9
10
11
12
13
14
常量注释
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
枚举注释
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
代码块注释
使用场景:
单行注释:
2
3
4
5
6
7
8
9
10
11
12
13
多行注释:
2
3
4
5
6
7
8
9
10
11
12
13
特殊标记
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TypeScript/JavaScript 注释规范
函数注释
格式要求:
2
3
4
5
完整示例:
2
3
4
5
6
7
8
参考: plus-ui/src/api/business/base/ad/adApi.ts:3-10
规范说明:
{Type}格式标注类型不同场景的函数注释:
1. API 请求函数:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2. 工具函数(简单):
2
3
4
5
6
7
8
9
10
11
参考: plus-ui/src/utils/boolean.ts:33-45
3. 工具函数(详细示例):
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
参考: plus-ui/src/utils/boolean.ts:33-82
4. 模块级注释:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
参考: plus-ui/src/utils/boolean.ts:1-30
接口和类型注释
格式要求:
2
3
4
5
完整示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
参考: plus-ui/src/api/business/base/ad/adTypes.ts:1-45
规范说明:
?标记类型别名注释:
2
3
4
5
6
7
8
9
10
11
12
13
14
变量注释
Vue组件中的变量:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
参考: plus-ui/src/views/business/base/ad/ad.vue:133-212
规范说明:
// ===== ... =====划分逻辑区域/** ... */注释Composable 函数注释
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
参考: plus-uniapp/src/composables/useAuth.ts:1-150
Vue 组件注释规范
模板注释
HTML 注释格式:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
参考: plus-uniapp/src/wd/components/wd-button/wd-button.vue:1-20
规范说明:
<!-- ... -->HTML注释完整示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
参考: plus-ui/src/views/business/base/ad/ad.vue:3-128
脚本注释
分区注释:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
参考: plus-ui/src/views/business/base/ad/ad.vue:133-394
规范说明:
// ===== ... =====划分逻辑区域/** ... */注释变量/** ... */注释方法样式注释
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
参考: plus-uniapp/src/wd/components/wd-button/wd-button.vue:447-825
规范说明:
// ===== ... =====划分样式区域//说明样式用途配置文件注释规范
JSON 配置文件
2
3
4
5
6
7
8
9
10
11
12
13
14
15
注意: JSON 不支持注释,描述信息应放在 README 或单独的文档中。
YAML 配置文件
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
规范说明:
# ===== ... =====划分配置区域Properties 配置文件
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SQL 脚本注释规范
表定义注释
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
参考: script/sql/oracle/oracle_ry_plus_new.sql:1-2
规范说明:
-- ===== ... =====标注表名COMMENT添加注释COMMENT说明表的用途索引注释
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
数据初始化注释
2
3
4
5
6
7
8
9
10
11
12
13
数据库升级脚本注释
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
注释模板
Java 类模板
2
3
4
5
6
7
8
9
Java 方法模板
2
3
4
5
6
7
8
9
TypeScript 函数模板
2
3
4
5
6
7
8
Vue 组件模板
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
注释生成工具
IDEA 注释模板
File > Settings > Editor > File and Code Templates
1. Class 模板:
2
3
4
5
6
2. Interface 模板:
2
3
4
5
6
3. Method 模板:
快捷键: 输入
/**然后按 EnterIDEA 会自动生成方法注释模板,包括 @param 和 @return
VS Code 注释模板
安装插件:
配置 settings.json:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
使用 Code Snippets:
File > Preferences > User Snippets > typescript.json
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
JavaDoc 生成工具
Maven 插件:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
生成文档:
TypeDoc 生成工具
安装:
配置 typedoc.json:
2
3
4
5
6
7
8
9
10
11
12
13
生成文档:
注释最佳实践
1. 注释WHY而非WHAT
❌ 不好的注释:
2
3
4
5
6
7
8
9
10
11
12
✅ 好的注释:
2
3
4
5
6
7
8
9
10
11
12
2. 保持注释和代码同步
❌ 不好的做法:
2
3
4
5
6
7
8
✅ 好的做法:
2
3
4
5
6
7
8
3. 使用TODO、FIXME等标记
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
4. 复杂逻辑添加示例
✅ 好的做法:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
5. 接口文档化
✅ 好的做法:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
6. 避免冗余注释
❌ 不好的注释:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
✅ 好的做法:
2
3
4
5
6
7
8
9
10
11
12
13
7. 注释的分层
模块级注释:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
类级注释:
2
3
4
5
6
7
8
9
10
11
12
方法级注释:
2
3
4
5
6
7
8
代码块注释:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
常见问题
1. 注释太多会影响代码可读性吗?
问题原因:
解决方案:
✅ 只在必要的地方添加注释 ✅ 通过清晰的命名减少注释需求 ✅ 注释说明WHY而非WHAT ✅ 定期清理过时的注释
示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2. 如何处理已过时的注释?
问题原因:
解决方案:
✅ 修改代码时同步更新注释 ✅ 定期检查和清理注释 ✅ 代码审查时检查注释准确性 ✅ 使用@deprecated标记废弃方法
示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
3. 中文注释还是英文注释?
问题原因:
解决方案:
✅ 本项目统一使用中文注释 ✅ 专业术语可保留英文 ✅ 如有国际化需求,可使用英文 ✅ 团队内部达成一致
示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
4. 注释应该写在代码前还是后?
问题原因:
解决方案:
✅ 类、方法、字段注释写在代码前 ✅ 行内注释可以写在代码后(简短说明) ✅ 代码块注释写在代码块前 ✅ 保持一致性
示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5. 如何为复杂算法添加注释?
问题原因:
解决方案:
✅ 先说明算法的目的和原理 ✅ 分步骤说明算法流程 ✅ 关键变量添加注释 ✅ 提供示例或参考链接
示例:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
总结
本文档详细介绍了 RuoYi-Plus-UniApp 项目的注释规范,包括:
遵循这些规范,可以:
记住: 好的注释是代码的一部分,它应该帮助理解代码,而不是重复代码。注释WHY,而非WHAT。
参考资料:
文档维护:
本文档将持续更新和完善,欢迎提出建议和改进意见。