自定义字段映射

郭胜凯2025/11/21

默认情况下, 实体类的属性名会被转换为下划线命名的大写字段名(如userName会映射为USER_NAME字段)。

如果需要自定义字段名比如将id强制映射为UID, 可以使用@TableField注解:

@TableName("custom_user_table")
public class User extends PO {
    @ID
    @TableField("UID")
    private Long id;
    private String username;
    private String email;

    // Getter和Setter方法
}

除此之外, 您还可以使用@TableField注解的其他属性来自定义约束映射表中的字段类型, 长度, 注释值等。

@TableName("custom_user_table")
public class User extends PO {
    @ID
    @TableField("UID")
    private Long id;

    @TableField(length = 50, columnType = "VARCHAR(50)", description = "用户名字段")
    private String username;
    private String email;

    // Getter和Setter方法
}

事实上, 我们会根据实体类的属性类型, 自动推断数据库字段的类型, 以以下代码为例:

@TableField(length = 50, columnType = "VARCHAR(50)", description = "用户名字段")

它等效于:

@TableField(length = 50, description = "用户名字段")

配置全局字段映射规则

除了在实体类中使用注解自定义字段映射外, 我们还可以通过全局配置来定义字段映射规则, 以便在整个项目中保持一致性。 在application.ymlapplication.properties中, 我们可以添加如下配置:

  • 使用 YAML 格式:
spring:
  mybatis:
    smart:
      naming-convention: underline_upper
  • 使用 Properties 格式:
spring.mybatis.smart.naming-convention=underline_upper

在上述配置中, 我们将命名策略设置为驼峰转大写下划线(underline_upper), 这也是Smart Mybatis的默认命名策略。 通过这种方式, 我们可以确保所有实体类的属性名都遵循相同的映射规则, 提高代码的可读性和维护性。

可选命名策略

Smart Mybatis支持以下几种命名策略:

取值描述
underline_upper驼峰转大写下划线 (如 userName 转为 USER_NAME)
underline_lower驼峰转小写下划线 (如 userName 转为 user_name)
as_is不进行任何转换, 使用Java实体原名称作为数据库表和列名

注意: 如果在实体类中使用了@TableField注解自定义字段名, 则该注解的配置优先于全局命名策略。