设计良好的Java实体类需遵循JavaBean规范、显式序列化、私有字段、包装类型与BigDecimal金额、ORM显式映射、完整构造逻辑及职责分离。

设计良好的 Java 实体类,核心是让类既准确表达业务数据结构,又便于持久化、传输和维护。它不是简单地把数据库字段照搬成字段,而要兼顾规范性、健壮性和可演进性。
遵循 JavaBean 与序列化规范
实体类必须是标准 JavaBean:public 类、私有字段、无参构造器、符合命名规范的 getter/setter。这是 MyBatis、Jackson、Hibernate 等框架自动识别和操作的基础。
- 显式声明 implements Serializable 并定义 serialVersionUID = 1L(或带时间戳的值),避免反序列化失败
- 所有字段用 private 修饰,禁止 public 或 protected 字段
- 布尔类型字段用 Boolean(非 boolean),getter 命名为 isActive() 而非 getActive()
- 数值类型统一用包装类(Integer、Long、BigDecimal),金额必用 BigDecimal
适配 ORM 映射与数据库语义
实体类是 Java 对象与数据库表之间的桥梁,映射必须清晰、可控、防御性强。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 使用 @Entity 和 @Table(name = "t_user") 明确绑定表名,不依赖默认驼峰转换
- 主键用 @Id + @GeneratedValue,并指定策略(如 GenerationType.IDENTITY)
- 每个字段用 @Column 显式声明约束:nullable = false、length = 50、precision/scale 等
- 状态类字段用 @Enumerated(EnumType.STRING),避免魔法数字;关联字段用 @ManyToOne 等注解标明关系方向
- 审计字段(如 createTime、updateTime)建议抽取到 BaseEntity 中统一继承
控制构造逻辑与对象完整性
避免对象处于“半初始化”状态,从源头保障数据一致性。
立即学习“Java免费学习笔记(深入)”;
- 必须提供 无参构造器(框架反射实例化必需)
- 提供 全参构造器,参数顺序与字段声明顺序一致
- 字段超过 4–5 个时,优先使用 静态内部 Builder 类,比 Lombok 的 @AllArgsConstructor 更可控
- setter 中只做赋值和基础校验(如 Objects.requireNonNull()),不嵌入业务逻辑、远程调用或 DB 查询
分离职责,避免过度承载
一个实体类不该同时承担数据库映射、API 响应、前端展示、计算逻辑等多重角色。
- 与数据库交互的实体(如 User)严格对齐表结构,可额外添加分页参数(pageNum/pageSize)或查询条件字段
- 面向前端的响应类放在 VO 层(如 UserVO),只包含需暴露的字段,避免敏感信息泄漏
- 计算型字段(如 getFullName())不属于实体本质属性,应移至 service 或 vo 层处理
- 校验逻辑用 @NotBlank、@DecimalMin 等 Bean Validation 注解声明,而非硬编码在 setter 中

















