Java Bean 规范
Spring Boot 项目的 Java Bean 规范,涵盖了命名规则、字段要求以及注解使用规范等方面。
1. Java Bean 整体要求
- 无业务逻辑:JavaBean 不能包含任何业务逻辑或计算,只能作为数据容器。
- 基本数据类型使用包装类型:所有的基本数据类型必须使用包装类型(例如
Integer、Double、Boolean等)。这样有助于避免空指针异常并统一处理空值。 - 无默认值:不允许在字段上设置任何默认值,必须明确初始化或通过构造方法赋值。
- 字段注释:每个字段必须添加注释,并且必须使用多行注释(即
/** ... */)。注释内容要清晰描述字段的含义、单位、用途等信息。 - 简化方法:使用 Lombok 库简化
getter、setter方法的生成,例如使用@Getter、@Setter注解,避免手动编写 getter/setter。 - 构造方法:建议使用 Lombok 提供的
@Builder、@NoArgsConstructor等注解来简化对象的构造方法以及set方法的生成。
2. JavaBean 名字划分
- XxxEntity:数据库持久对象(或称
DO)。用于映射数据库表中的数据。类名与表名一致,字段与表中的列名一致。 - XxxVO:返回前端的对象(或称
Resp)。用于响应前端数据,封装返回的业务数据。 - XxxForm:前端请求对象(或称
Req)。用于接收前端传递的请求数据,可以作为请求参数。 - XxxDTO:数据传输对象。用于服务之间的数据传输,通常用于跨系统或层之间的通信。
- XxxBO:内部处理对象。仅用于业务层内部处理,不能暴露给前端或外部系统。
3. 数据对象命名与规范
XxxEntity
结尾规范:类名以
Entity或DO结尾,且应与数据库表名一致。- 例:
UserEntity或UserDO
- 例:
字段与数据库一致:类中的字段应与数据库中的列名一致,确保映射的准确性。不能遗漏任何字段,也不能多出字段。
- 例:字段
userName对应数据库中的user_name。
- 例:字段
字段注释:每个字段必须添加注释,并且注释内容应与数据库字段注释一致,描述字段的含义和用途。
- 例:java
/** * 用户姓名 */ private String userName;
- 例:
日期类型统一:项目中的日期类型必须统一,推荐使用
java.time.LocalDateTime或java.time.LocalDate。
XxxForm(请求对象)
不继承自 Entity:
Form不可以继承自Entity。可以继承其他对象:
Form可以继承、组合其他 DTO、VO 或 BO 对象,作为请求数据的承载体。仅限请求数据:
Form对象仅用于前端或 RPC 请求数据的传递,不应用于返回数据。
XxxVO(返回对象)
不继承自 Entity:
VO不可以继承自Entity。可以继承其他对象:
VO可以继承、组合其他 DTO、VO 或 BO 对象,封装返回的业务数据。仅限返回数据:
VO对象仅用于封装返回给前端或 RPC 的数据。
XxxBO(业务对象)
不继承自 Entity:
BO不可以继承自Entity。仅限服务层使用:
BO对象只能用于服务层(如service、manager、dao层)进行业务处理,不得用于controller层。
4. 字段命名规则
命名规则:字段命名遵循小驼峰命名法(camelCase),即首字母小写,后续每个单词的首字母大写。
- 例:
userName、birthDate、orderAmount。
- 例:
避免使用保留字:不要使用 Java 保留字(如
class、int、float)作为字段名。数字字段:字段名应清晰表示其含义,不建议使用带有数字的字段名,除非在某些特殊情况下(如计数器字段、版本字段等)。
5. Lombok 注解使用
@Getter / @Setter:使用 Lombok 注解简化 getter/setter 方法的生成。
java@Getter @Setter private String userName;@Builder:用于简化对象的构建过程。它为类自动生成一个 builder 方法,用于创建对象。
java@Builder public class UserDTO { private String userName; private String password; }@NoArgsConstructor:为类自动生成一个无参构造方法。对于 JPA 或数据库映射常常需要无参构造函数。
java@NoArgsConstructor public class UserEntity { private String userName; private String password; }
6. 日期与时间类型
项目中的日期类型必须统一,推荐使用以下类型:
- java.time.LocalDate:用于日期表示(无时间部分)。
- java.time.LocalDateTime:用于日期时间表示。
不要使用 java.util.Date 或 java.sql.Date,以保证一致性与可移植性。
7. 规范总结
- 类名、字段名规范:类名采用驼峰命名法,且根据不同对象类型使用相应的后缀(如
Entity、VO、DTO、Form、BO)。 - 注释与文档:所有字段必须添加注释,并与数据库字段注释保持一致。
- Lombok 简化代码:利用 Lombok 简化 getter、setter 方法的生成及构造方法等。
- 不包含业务逻辑:JavaBean 不应包含业务逻辑,仅作为数据承载对象使用。
遵循这些规范可以大大提升代码的一致性、可维护性和可扩展性。