Bootstrap

Java杂记:@TableField注解用法详解

@TableField 是 MyBatis-Plus 中的一个注解,用于标识实体类字段与数据库表字段的映射关系。它可以用来控制某些字段在数据库操作中是否被映射、是否参与数据库的插入、更新等操作,或者设置字段在数据库中的实际名称。

@TableField 可以使得代码更加灵活,避免了与数据库字段名不一致时的麻烦,也使得字段的自动填充和映射控制更加精细。

常见的作用和用法

  1. 字段映射与数据库字段名不一致
    如果实体类字段名与数据库表字段名不一致,可以使用 @TableField 注解来指定对应的数据库字段名。

    public class User {
        @TableField("user_name")  // 数据库表中字段名为 user_name
        private String username;
    }
    
  2. 忽略某个字段
    如果某个字段不需要参与数据库操作(例如不需要插入或更新),可以使用 @TableField(exist = false) 来标记。

    public class User {
        @TableField(exist = false)  // 表示该字段不映射到数据库
        private String temporaryField;
    }
    
  3. 指定字段是否参与插入、更新操作
    @TableField 可以与 insertupdate 属性一起使用,指定该字段在插入或更新时是否参与操作。

    public class User {
        @TableField(fill = FieldFill.INSERT)  // 仅在插入时填充
        private Date createTime;
    
        @TableField(fill = FieldFill.INSERT_UPDATE)  // 在插入和更新时都填充
        private Date updateTime;
    }
    
  4. 自定义填充策略
    MyBatis-Plus 提供了自动填充的功能,可以通过 @TableField 注解的 fill 属性指定某些字段在插入或更新时由 MyBatis-Plus 自动填充,例如时间戳、创建者等。

    @TableField(fill = FieldFill.INSERT)  // 在插入时自动填充
    private Date createTime;
    
  5. 设置数据库字段的类型
    @TableField 注解还可以设置数据库字段的类型,例如 typeHandler 属性可以指定自定义的类型处理器,用于特定的字段类型转换。

    @TableField(typeHandler = MyCustomTypeHandler.class)
    private String customField;
    

常用属性

  • value:数据库字段名(默认是实体类字段名)。
  • exist:是否映射到数据库,false 表示不映射,true 表示映射(默认值为 true)。
  • fill:字段填充策略,FieldFill.INSERTFieldFill.UPDATEFieldFill.INSERT_UPDATE,可以指定字段何时进行自动填充。
  • typeHandler:指定字段的类型处理器,用于自定义字段类型转换。

示例

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.enums.FieldFill;
import java.util.Date;

@TableName("user")
public class User {

    private Long id;
    
    @TableField("user_name") // 映射数据库中的 "user_name" 字段
    private String username;
    
    @TableField(exist = false) // 不映射数据库中的字段
    private String temporaryField;
    
    @TableField(fill = FieldFill.INSERT) // 在插入时填充
    private Date createTime;
    
    @TableField(fill = FieldFill.INSERT_UPDATE) // 在插入和更新时填充
    private Date updateTime;

    // Getter and Setter methods
}
;