变量名必须用英文小写字母加下划线(snake_case),禁止驼峰命名;布尔字段须以is_开头且getter为getIsXxx;禁用拼音、缩写、数字或下划线开头命名;DTO字段名须与数据库列名严格一致。

变量名必须用英文小写字母加下划线,不能用驼峰
阿里巴巴 Java 开发手册明确禁止使用 camelCase 命名变量(比如 userName、maxRetryCount),要求统一用 snake_case。这不是风格偏好,而是强制规范——尤其在 DTO、VO、DAO 层的字段命名中,IDEA 里开 Alibaba Java Coding Guidelines 插件会直接标红警告。
常见错误现象:private String userToken; → 违规;应改为 private String user_token;
- 所有普通变量、字段、方法参数都适用该规则,包括
static final常量(但常量本身要用大写+下划线,如MAX_RETRY_COUNT) - 类名、方法名、包名仍保持标准 Java 驼峰(
UserServiceImpl、saveUser、com.alibaba.xxx),仅字段/变量层切换 - MyBatis 的
resultMap或 JPA 的@Column(name = "user_name")必须与数据库列名一致,而数据库列名也应是snake_case,否则映射会出错
布尔类型变量必须以 is_ 开头,且 getter 方法也要匹配
手册特别强调:布尔字段不能叫 valid、enabled,必须是 is_valid、is_enabled。否则 Spring、MyBatis 等框架反射读取时可能误判——它们默认按 isXxx() 查找 getter,而你若只写 isValid(),对应字段却是 valid,就断开了约定。
实操建议:
立即学习“Java免费学习笔记(深入)”;
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 定义字段:
private Boolean is_deleted;(注意不是deleted) - 生成 getter:
public Boolean getIsDeleted() { return is_deleted; }—— 必须是getIsDeleted,不是isDeleted(后者会被 Spring 当作 boolean 原生类型处理,且不兼容Boolean包装类) - 如果用 Lombok,要显式指定:
@Getter public Boolean is_deleted;,否则@Getter默认生成isDeleted(),反而违规
避免拼音、缩写、数字开头或纯数字命名
像 shouji(手机)、usrNm(user name)、2nd_try 这类命名,手册直接列为“禁止”。它们破坏可读性,也容易引发 IDE 自动补全混乱或序列化失败(如 Jackson 默认忽略下划线开头字段,但 _id 又是常见场景,需额外配置)。
典型陷阱:
-
private String usr_name;→ 错误缩写,应为user_name -
private Integer order_2nd_count;→ 数字出现在中间,违反“字母+下划线”原则,应改为order_second_count -
private String _status;→ 下划线开头,Jackson 默认不序列化,若必须用,得加@JsonProperty("_status")
DTO/VO 字段命名和数据库列名必须严格对齐
手册隐含一个硬性约束:只要用了 MyBatis 或 JDBC 模板,DTO 类字段名就必须和数据库 SELECT 出来的列名完全一致(大小写+下划线)。比如数据库有 create_time,DTO 就不能写成 created_time 或 createAt,否则查出来是 null。
真实项目中高频出问题的地方:
- MySQL 默认不区分大小写,但字段定义是
user_id,你 DTO 写成userId,MyBatis 的自动映射(autoMappingBehavior=FULL)不会帮你转换 - 用
@Results手动映射时,@Result(property = "user_name", column = "user_name")里的property值必须和 DTO 字段名一字不差 - Swagger 文档生成依赖字段名,命名不一致会导致接口文档显示
userName,但实际 JSON 返回却是user_name,前端同学会懵
最稳妥的做法:建表语句里用 snake_case,Java DTO 里字段名照抄,连注释都保持同步更新。别指望框架替你“智能适配”。

















