命名规范
TIP
规定后端项目中类、方法、变量、常量等的命名方式,适用于 Spring Boot 3 + MyBatis-Plus 技术栈。
设计原则
| 原则 | 说明 |
|---|---|
| 见名知意 | 名称应准确表达用途,避免 data、temp、handler 等模糊命名 |
| 风格统一 | 同类事物使用同一种命名风格,全项目保持一致 |
| 英文优先 | 标识符使用英文,中文仅用于注释与文档 |
| 避免缩写 | 除通用缩写(如 id、url、api)外,不使用难懂缩写 |
| 禁止拼音 | 不使用拼音或拼音缩写 |
命名风格速查
| 类型 | 风格 | 示例 |
|---|---|---|
| 类名(Controller/Service/Mapper) | PascalCase + 后缀 | SysUserController、SysUserService、SysUserMapper |
| Service 实现类 | PascalCase + Impl 后缀 | SysUserServiceImpl |
| 方法 | camelCase,动词开头 | findUsers、saveUser、updateUserStatus |
| 变量 | camelCase | userId、deptId、conditions |
| 常量 | UPPER_SNAKE_CASE | MAX_RETRY_COUNT、DEFAULT_PAGE_SIZE |
| PO / DTO 类 | PascalCase | SysUserPO、SysUserDTO |
| 包名 | 全小写 + 业务域 | com.guava.admin.controller.sysuser |
数据库表名、字段名等命名详见 数据库命名规范。
类命名
Controller
- 格式:
业务域 + Controller - 位于
controller/包下
java
✅ SysUserController
✅ SysDeptController
✅ SysMenuController
❌ UserController // 缺少 Sys 前缀,与项目命名不一致
❌ sysUserController // 首字母小写Service
- 接口:
业务域 + Service - 实现:
业务域 + ServiceImpl - 位于
service/与service/impl/包下
java
// 接口
✅ SysUserService
✅ SysDeptService
// 实现
✅ SysUserServiceImpl
✅ SysDeptServiceImplMapper / Repository
- 格式:
业务域 + Mapper - 位于
repository/包下
java
✅ SysUserMapper
✅ SysDeptMapper
✅ SysRoleMenuMapperSQL Provider
- 格式:
业务域 + SqlProvider - 位于
repository/provider/包下
java
✅ SysUserSqlProvider
✅ SysDeptSqlProviderFeign 接口
- 格式:
目标服务 + FeignService或业务 + FeignService
java
✅ RedisUserFeignService
✅ RedisMenuFeignService方法命名
查询方法
| 前缀 | 说明 | 示例 |
|---|---|---|
find | 查询列表(分页) | findUsers、findDealerUsers |
select | 查询单条 | selectUserInfoById |
get | 获取详情/属性 | getUserInfoById、getTransHash |
export | 导出数据 | exportUserData |
count / Count | 统计数量 | selectCustomerCount |
写入方法
| 前缀 | 说明 | 示例 |
|---|---|---|
save | 新增保存 | saveUser、saveUserPosts |
update | 更新操作 | updateUser、updateUserStatus |
delete | 删除操作 | deleteUser |
insert | 插入(MyBatis 风格) | insertUser |
示例
java
// ✅ 动词开头,语义清晰
public IPage<Map<String, Object>> findUsers(Page page, String conditions) { }
public Map<String, Object> saveUser(Map<String, Object> param) { }
public Map<String, Object> updateUser(Long id, Map<String, Object> param) { }
// ❌ 模糊命名
public IPage<Map<String, Object>> getUsers() { } // get 无法区分是查询列表还是单条
public Map<String, Object> userData() { } // 无动词
public Map<String, Object> doSave(Map param) { } // doSave 不清晰变量命名
java
// ✅ 名词/名词短语
String account = "admin";
Long deptId = 1001L;
String conditions = MyUtil.getConditionsWhere(params, page);
// ✅ 布尔值使用 is / has 前缀
boolean isEmpty = StringUtils.isEmpty(deptId);
boolean hasPermission = checkPermission(userId);
// ❌ 模糊命名
String str = "admin"; // 无意义
Long a = 1001L; // 单个字母
Map<String, Object> map = ...; // 无业务语义常量命名
java
// ✅ UPPER_SNAKE_CASE
public static final int MAX_RETRY_COUNT = 3;
public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
public static final Set<Integer> FACTORY_SET = Set.of(100701, 100702);
// ❌ 非全大写下划线
public static final int maxRetryCount = 3;
public static final String defaultFormat = "yyyy-MM-dd";包命名
- 全小写,使用域名反转前缀
- 业务模块按域划分
text
✅ com.guava.admin.controller.sysuser
✅ com.guava.admin.service.sysuser.impl
✅ com.guava.admin.repository.provider
❌ com.guava.admin.Controller.SysUser // 大写
❌ com.guava.admin.SERVICE // 全大写命名 Checklist
提交代码前自查:
- 类名使用 PascalCase,且带有正确后缀(Controller/Service/Mapper/Impl)
- 方法名使用 camelCase,动词开头,语义清晰
- 变量名使用 camelCase,无无意义命名(
a、temp、data) - 常量使用 UPPER_SNAKE_CASE
- 包名全小写,按业务域划分
- 无拼音、无无意义缩写
- 数据库表名、字段名命名符合 数据库命名规范