JPA
在 JPA(Java Persistence API)中,@Transient
注解用于指示某个字段不需要持久化到数据库中。当一个字段被标记为 @Transient
时,JPA 实现会忽略该字段,不会将其保存到数据库。
举个例子,假设我们有一个 User
实体类,其中包含了一个名为 temporaryData
的字段,但这个字段不需要被持久化到数据库中,可以这样使用 @Transient
注解:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
@Entity
public class User {
@Id
private Long id;
private String name;
@Transient
private String temporaryData; // 这个字段不会被持久化到数据库中
// 其他字段和方法
}
在这个例子中,temporaryData
字段使用了 @Transient
注解,因此它不会被持久化到数据库中。
注意@Transient有两个依赖包:
javax.persistence.Transient;
org.springframework.data.annotation.Transient;
只有第一个依赖包的Transient才能让数据库查询和持久化忽略对于加了注解的字段,
对于第二个依赖包不会生效,我也不清楚有什么用。
MyBatis Plus
在 MyBatis Plus 框架中,@TableField
注解用于标识实体类字段与数据库表中字段的映射关系。除了常规的字段映射外,@TableField
还提供了一些属性来帮助我们更精细地控制字段映射的行为。
以下是 @TableField
注解的一些常用属性:
value
:指定数据库表中的字段名。如果实体类字段名和数据库字段名不一致,可以使用该属性进行映射。exist
:指示该字段是否参与持久化操作。当设置为false
时,该字段不会被自动映射到数据库表中。select
:指示在 SQL 查询语句中是否包含该字段。设置为false
时,在查询操作时会排除该字段。insertStrategy
:设置插入策略,用于在执行插入操作时控制字段的行为。updateStrategy
:设置更新策略,用于在执行更新操作时控制字段的行为。
以下是一个简单的示例,展示如何在 MyBatis Plus 中使用 @TableField
注解:
import com.baomidou.mybatisplus.annotation.TableField;
public class User {
private Long id;
@TableField(value = "user_name", exist = true, select = true)
private String username;
@TableField(value = "user_age", exist = false)
private Integer age; // 该字段不会参与持久化操作
// 其他字段和方法
}
在这个示例中,username
字段使用了 @TableField
注解并设置了 value
、exist
和 select
属性,而 age
字段则设置了 exist = false
,因此不会参与持久化操作。