在数据库字段命名格式和实体类属性命名格式不一致的情况下,如何进行字段与属性之间的映射?

在数据库字段命名格式和实体类属性命名格式不一致的情况下(如数据库字段为 id_noID_NO,实体类为 idNo),我们需要通过适当的配置或注解进行字段与属性之间的映射。以下是解决此问题的几种常见方式:


1. 使用 MyBatis 通用 Mapper 的 @Column 注解

通用 Mapper 提供了 @Column 注解,可以明确指定实体类字段与数据库列之间的映射。

示例:

假设数据库字段为 id_no,实体类字段为 idNo,映射如下:

public class User {
    @Column(name = "id_no")
    private String idNo;

    // getter 和 setter
}

注意: 如果数据库字段是 ID_NO,只需将 @Column(name = "ID_NO") 替换即可。


2. 使用 MyBatis 的全局配置

MyBatis 可以通过配置映射规则,自动将 id_noID_NO 等形式映射为实体类中的 idNo

配置方式:

在 MyBatis 的 mybatis-config.xml 文件中,开启驼峰命名转换:

<settings>
    <setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
  • 效果:MyBatis 自动将数据库中下划线命名的字段(如 id_noID_NO)映射到实体类的驼峰命名属性(如 idNo)。

注意: 这种方式不需要在实体类中额外配置 @Column 注解。


3. 通过 XML 显式配置映射关系

如果使用的是 XML 配置,可以在映射文件中手动配置字段和属性的对应关系。

示例:

<resultMap id="userResultMap" type="com.example.User">
    <result column="id_no" property="idNo" />
</resultMap>

然后在 SQL 映射中引用 resultMap

<select id="selectUser" resultMap="userResultMap">
    SELECT id_no, username FROM user WHERE id_no = #{idNo}
</select>

4. 使用 Lombok 的 @Builder 或者自定义 TypeHandler(特殊情况)

如果字段映射规则非常复杂(例如字段命名规则不统一、动态字段映射等),可以通过 Lombok 的 @Builder 或 MyBatis 的 TypeHandler 自定义字段转换逻辑。

Lombok 结合 @Builder

@Builder
public class User {
    private String idNo;

    // 不需要特别映射,由 Builder 提供灵活性
}

自定义 TypeHandler

创建一个 TypeHandler,在复杂的场景下转换字段与属性。


总结与推荐

方式 使用场景 优势 缺点
@Column 注解 单表映射清晰 明确指定字段对应关系,简单直观 每个字段都需要手动注解,增加代码量
驼峰命名转换 统一风格 全局有效,减少手动配置 无法处理不规则字段映射(如 ID_NO
XML 映射 特殊字段场景 灵活处理复杂字段映射 XML 配置繁琐,维护成本高
TypeHandler 复杂规则 适合动态或复杂映射需求 实现复杂,较少使用

推荐:

  1. 如果字段规则清晰(如 id_no -> idNo),优先 开启驼峰命名转换
  2. 对个别字段有特殊需求时,使用 @Column 注解
  3. 复杂场景下使用 XML 映射TypeHandler 作为补充。
posted on 2024-11-29 16:05  九七年的菠萝啤  阅读(295)  评论(0)    收藏  举报