MyBatis 字段映射的解决方案

 更新时间:2026年05月27日 10:15:35   作者:Sprintz4r  
本文介绍了三种MyBatis数据库字段与Java实体属性映射解决方案:手动@Results映射、可复用的@Results(id)映射及全局驼峰命名自动转换配置,通过这些方法,可以有效减少冗余代码,简化Mapper接口设计,感兴趣的朋友跟随小编一起看看吧

引言

在使用 MyBatis 进行数据库操作时,数据库字段名(如下划线命名 delete_flag)与 Java 实体类属性名(驼峰命名 deleteFlag)之间的映射是一个常见问题。本文将介绍三种解决方案:手动 @Results 映射、可复用的 @Results(id) 映射以及全局驼峰命名配置。

首先,我们定义一个实体类UserInfo,后续所有示例都基于这个类:

public class UserInfo {
    private Integer id;
    private String username;
    private String password;
    private Integer age;
    private String gender;
    private String phone;
    private Integer deleteFlag;   // 数据库字段 delete_flag
    private Date createTime;      // 数据库字段 create_time
    private Date updateTime;      // 数据库字段 update_time
    // getter / setter 省略
}

手动 @Results 映射

最直接的方式是在每个查询方法上使用 @Results 注解,手动指定字段映射关系。

@Mapper
public interface UserInfoMapper {
    @Results({
        @Result(column = "delete_flag", property = "deleteFlag"),
        @Result(column = "create_time", property = "createTime"),
        @Result(column = "update_time", property = "updateTime")
    })
    @Select("select * from user_info")
    List<UserInfo> selectAll();
    // 另一个查询方法,需要重复写一遍 @Results
    @Results({
        @Result(column = "delete_flag", property = "deleteFlag"),
        @Result(column = "create_time", property = "createTime"),
        @Result(column = "update_time", property = "updateTime")
    })
    @Select("select * from user_info where id = #{id}")
    UserInfo selectById(Integer id);
}

可复用的 @Results(id) 映射

为了解决重复代码问题,MyBatis 允许为@Results 注解指定一个 id,其他方法可以通过 @ResultMap 引用该映射。

@Mapper
public interface UserInfoMapper {
    @Results(id = "BaseMap", value = {
        @Result(column = "delete_flag", property = "deleteFlag"),
        @Result(column = "create_time", property = "createTime"),
        @Result(column = "update_time", property = "updateTime")
    })
    @Select("select * from user_info")
    List<UserInfo> selectAll();
    // 直接引用上面定义的 BaseMap,无需重复写 @Results
    @ResultMap(value = "BaseMap")
    @Select("select * from user_info where id = #{id}")
    UserInfo selectById(Integer id);
    // 再多一个方法也能复用
    @ResultMap(value = "BaseMap")
    @Select("select * from user_info where username = #{username}")
    UserInfo selectByUsername(String username);
}

全局驼峰命名自动转换

如果数据库字段命名规范统一(如下划线命名),最优雅的方式是开启 MyBatis 的全局驼峰命名自动转换功能。

# application.yml
mybatis:
  configuration:
    map-underscore-to-camel-case: true # 配置驼峰自动转换

开启后,Mapper 接口变得极其简洁,无需任何 @Results 注解:

@Mapper
public interface UserInfoMapper {
    @Select("select * from user_info")
    List<UserInfo> selectAll();
    @Select("select * from user_info where id = #{id}")
    UserInfo selectById(Integer id);
    @Select("select * from user_info where username = #{username}")
    UserInfo selectByUsername(String username);
}

MyBatis 会自动将 delete_flag 映射为 deleteFlagcreate_time 映射为 createTime

建议在项目初期就统一数据库命名规范,并开启 map-underscore-to-camel-case 配置,这样可以最大程度减少冗余的映射代码。

到此这篇关于MyBatis 字段映射的解决方案的文章就介绍到这了,更多相关mybatis 字段映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中try、catch的使用方法

    Java中try、catch的使用方法

    这篇文章主要介绍了Java中try、catch的使用方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表

    SpringBoot 2.0 整合sharding-jdbc中间件实现数据分库分表

    这篇文章主要介绍了SpringBoot 2.0 整合sharding-jdbc中间件,实现数据分库分表,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-06-06
  • Spring Boot中的YML配置列表及应用小结

    Spring Boot中的YML配置列表及应用小结

    在Spring Boot中使用YAML进行列表的配置不仅简洁明了,还能提高代码的可读性和可维护性,这篇文章主要介绍了Spring Boot中的YML配置列表的详细解析,需要的朋友可以参考下
    2025-05-05
  • 利用Kotlin + Spring Boot实现后端开发

    利用Kotlin + Spring Boot实现后端开发

    这篇文章主要给大家介绍了关于利用Kotlin + Spring Boot实现后端开发的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Java+JFrame实现贪吃蛇小游戏

    Java+JFrame实现贪吃蛇小游戏

    这篇文章主要为大家详细介绍了Java+JFrame实现贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 浅谈Java中的集合存储数据后,输出数据的有序和无序问题

    浅谈Java中的集合存储数据后,输出数据的有序和无序问题

    这篇文章主要介绍了浅谈Java中的集合存储数据后,输出数据的有序和无序问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 详解Spring系列之@ComponentScan批量注册bean

    详解Spring系列之@ComponentScan批量注册bean

    本文介绍各种@ComponentScan批量扫描注册bean的基本使用以及进阶用法和@Componet及其衍生注解使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2022-02-02
  • Kafka日志清理实现详细过程讲解

    Kafka日志清理实现详细过程讲解

    这篇文章主要为大家介绍了Kafka日志清理实现详细过程讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • java json不生成null或者空字符串属性(详解)

    java json不生成null或者空字符串属性(详解)

    下面小编就为大家带来一篇java json不生成null或者空字符串属性(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 图解程序员必须掌握的Java常用8大排序算法

    图解程序员必须掌握的Java常用8大排序算法

    本文以图片与文字结合的方式讲解了程序员必须掌握的Java常用8大排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序,需要的朋友可以参考下
    2015-07-07

最新评论