实体类需规范编写:字段用包装类型、private修饰并加中文注释;提供无参和字段顺序一致的全参构造器;getter/setter严格遵循javabeans规范,布尔字段getter以is开头;序列化时显式声明serialversionuid。

实体类(Entity)不是随便写个 class 就完事的,它承担着数据建模、持久化映射和跨层传递的核心职责。规范编写的关键在于:统一结构、明确语义、适配框架、规避隐性风险。
字段定义:全用包装类型 + 私有 + 有注释
数据库字段常为空(NULL),基本类型(int、boolean)无法表达“未设置”语义,容易导致空指针或误判。
- 用 Integer 替代 int,Boolean 替代 boolean(尤其布尔字段如
is_deleted) - 金额类字段必须用 BigDecimal,避免浮点精度丢失
- 所有字段声明为 private,并配上简明中文注释,说明业务含义(如:// 用户状态:0-禁用,1-启用)
构造方法:无参 + 全参,顺序一致
MyBatis、Jackson、Spring 等主流框架依赖无参构造器做反序列化或动态实例化;全参构造器则保障对象创建时字段不遗漏。
- 必须提供 public 无参构造器(哪怕只有一行
super();) - 全参构造器参数顺序严格对应字段声明顺序(如字段顺序是
id, name, createTime,构造器参数也必须是这个顺序) - 字段超过 4–5 个时,建议改用静态内部 Builder 类,避免长参数列表难以维护
Getter/Setter:严格遵循 JavaBeans 规范
框架靠命名规则自动绑定属性,错一个字母(比如 getUserName() 写成 getUser_name())就会静默失败,字段映射为空。
- 布尔字段的 getter 必须以 is 开头(
isActive()),不能用getActive() - setter 里只做赋值 + 基础非空校验(如
Objects.requireNonNull(name)),禁止调用 DB、发消息、远程接口等业务逻辑 - 避免在 getter 中做计算(如拼接字符串、查缓存),这类逻辑应移出 Entity,放到 VO 或 Service 层
序列化与扩展:显式声明 serialVersionUID
Entity 往往要被序列化(如 Redis 缓存、RPC 传输),一旦类结构变更(增删字段、改修饰符),没有固定 UID 会导致 InvalidClassException。
- 加上
implements Serializable - 显式定义
private static final long serialVersionUID = 20261007L;(推荐用日期格式,便于追踪) - 若确定永不序列化(纯前端 DTO),需团队书面约定并文档化,不可默认省略










