解读一个经典Entity(实体类) —— Spring MVC

代码片段展示了一个典型的Java实体类(Entity),这种类通常用于ORM(对象关系映射)框架(如 Hibernate、JPA)来将Java对象映射到数据库表。

@Entity:表示该类是一个JPA实体类;ORM框架会将该类映射到数据库中的表。

@Table:指定该实体类对应的数据库表名。

@JsonIgnoreProperties:用于Jackson序列化/反序列化时忽略不需要的属性,防止循环引用或无效字段的映射。

1. public final static String ACICODE = "ACI_CODE"; 等常量部分

public final static String ACICODE = "ACI_CODE";
...

作用

  • 这部分定义了一系列的常量,每个常量对应一个数据库的字段名。
  • 通常在代码中,常量的作用是提高代码的可读性,避免"硬编码"。
  • 在查询或构造SQL语句时,直接使用这些常量,避免直接写 "ACI_CODE" 这种字符串,减少拼写错误的可能性。

使用场景

  • 可能会在查询、映射、校验等操作中使用。例如:
criteria.add(Restrictions.eq(ExOrder.ACICODE, "12345"));

这里直接使用ExOrder.ACICODE而不是写 "ACI_CODE",提高了代码的可维护性。

2. 中间@Column等部分的诸多注解

🔎 1. JPA(持久化)相关注解

这些注解来自于JPA(Java Persistence API),主要用于ORM 框架(如 Hibernate)中,负责将实体类映射到数据库表中。

✅ @Id

  • 标识该字段为主键,等价于SQL中的PRIMARY KEY。
  • 每个JPA实体类中必须要有一个@Id,否则ORM框架无法识别主键。

✅ @GeneratedValue(generator = "idGenerator")

  • 指定该字段的主键生成策略
  • 通常用于自增主键、UUID、雪花算法等ID生成策略。
  • generator = "idGenerator" 表示该主键生成器的名字,需要在配置文件或其他代码中定义。
  • 常见的主键生成策略IDENTITY:数据库自增(如MySQL的AUTO_INCREMENT)。SEQUENCE:使用数据库的序列(如Oracle的SEQUENCE)。UUID:使用Java的UUID机制生成唯一标识。snowflake:使用雪花算法生成分布式唯一ID(在大数据项目中很常见)。

✅ @Generator("snowFlakeGenerator")

  • 该注解并非JPA标准注解,可能是项目中的自定义注解,用于标明 ID 生成策略为“雪花算法”。

✅ @Column

  • Java类的字段映射到数据库表的具体列
  • 常见属性:
  • name:指定数据库列名。
  • nullable:是否允许NULL值(默认为true)。
  • length:字符串最大长度仅适用于VARCHAR等字段)。
  • precision 和 scale:用于DECIMAL等数值类型字段,分别表示总位数和小数点位数。
  • 示例:
@Column(name = "EI_TYPE", nullable = true, length = 50)
private String eiType;

等价于:

EI_TYPE VARCHAR(50) NULL

🔎 2. 数据校验相关注解

这些注解通常与 Spring Boot的spring-boot-starter-validation、Hibernate Validator结合使用,负责在数据入库之前进行校验,提升数据的准确性和安全性。

✅ @RichLength(自定义注解)

  • 该注解可能是项目中自定义的注解,作用类似于@Size,用于对字符串长度的约束。
  • 常见参数:max:最大长度。min:最小长度。groups:指定校验分组。
  • 通常与数据校验框架结合使用(如Hibernate Validator),控制字符串长度的上下限,确保数据有效性。

✅ @DateString(自定义注解)

  • 可能是项目中的自定义注解,用于校验日期格式的正确性。
  • 例如,ETA、ETD 可能要求符合 "yyyy-MM-dd" 格式。

🧩 替代方案(标准校验注解)

在标准的 javax.validation 中,常见的校验注解包括:

  • @NotNull:字段不能为空。
  • @Size(max = 50, min = 0):字符串长度限制。
  • @Pattern(regexp = "\\d{4}-\\d{2}-\\d{2}"):指定日期格式校验。
  • @Email:校验邮箱地址格式。
  • @Positive / @Negative:校验数字的正负。

🔎 3. 特殊功能相关注解

✅ @Generator(自定义注解)

  • @Generator("snowFlakeGenerator") 可能是用于指定雪花算法生成器的自定义注解。
  • 这种注解一般在项目的工具类或ID生成器中定义。

✅ @VirtualColumn

  • 该注解不是标准JPA注解,通常是项目中的自定义注解。
  • 常用于非持久化字段,即该字段不映射到数据库表中。
  • 例如,reprocessData可能是一个临时数据,只用于数据处理而非持久化。
  • 示例:
@VirtualColumn
private String tempData;  // 非数据库字段,运行时使用

🔎 4. 文档注解

✅ /** 注释 **/

  • 提供代码解释,帮助开发人员理解字段的用途。
  • 在 IDE(如 IntelliJ、Eclipse)中可通过 /** + Enter 自动生成。

✅ @Deprecated

  • 标注已废弃的方法或类,提示开发者不要再使用。

✅ @SuppressWarnings

  • 抑制编译器警告,通常用于屏蔽非关键性提示。

3. Getter和Setter方法

public Date getCustCfmBillTime() {
    return custCfmBillTime;
}

public void setCustCfmBillTime(Date custCfmBillTime) {
    this.custCfmBillTime = custCfmBillTime;
}

作用

  • 这些方法是标准的Getter / Setter,用于获取和设置实体类的属性值。
  • ORM框架在持久化数据时,必须通过Getter/Setter来访问和修改实体类中的属性(除非使用@Access等特殊配置)。

为什么要写这些方法?

  • ORM 框架(如 Hibernate)在操作数据时,是通过反射机制调用这些方法的。
  • 在代码逻辑中,外部类访问私有属性时,也依赖这些方法。

4. 这类实体类通常的生成方式

  • 使用 IDE 自动生成IntelliJ IDEA、Eclipse 中的 “Generate” 功能可快速生成 Getter/Setter。
  • 使用代码生成工具MyBatisX(快速生成 MyBatis 实体类、Mapper、Service)JPA Buddy(快速生成 JPA 实体类及 CRUD)
  • 数据库逆向工程工具MyBatis Generator、JPA Model Generator 等可直接根据数据库表生成实体类。

5. 代码整体逻辑梳理

三部分结构总结

1.常量定义 (public static final):存储字段名,避免硬编码。

2.属性 (private String ...):真实映射数据库表中的字段,受 @Column 等注解管理。

3.Getter/Setter 方法:数据的读写接口,ORM 框架通过这些方法访问和更新数据。

全部评论

相关推荐

07-07 12:25
门头沟学院 Java
程序员牛肉:你这个智邮公司做的就是那个乐山市税务系统的服务吗?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务