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利用原始HttpURLConnection发送POST数据

    谈谈Java利用原始HttpURLConnection发送POST数据

    这篇文章主要给大家介绍java利用原始httpUrlConnection发送post数据,设计到httpUrlConnection类的相关知识,感兴趣的朋友跟着小编一起学习吧
    2015-10-10
  • Java三大特性-封装知识小结

    Java三大特性-封装知识小结

    所有的面向对象编程语言的思路都是差不多的,而这三大特性,则是思路中的支柱点,接下来我就重点讲解了一下java三大特性-封装,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-03-03
  • 构建springboot自动生成mapper文件和dao接口项目的步骤和配置方法

    构建springboot自动生成mapper文件和dao接口项目的步骤和配置方法

    这篇文章主要介绍了构建springboot自动生成mapper文件和dao接口项目的步骤和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • Java结合Kotlin实现宝宝年龄计算

    Java结合Kotlin实现宝宝年龄计算

    这篇文章主要为大家介绍了Java结合Kotlin实现宝宝年龄计算示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Java IO文件后缀名过滤总结

    Java IO文件后缀名过滤总结

    本篇文章给大家详细讲述了Java IO文件后缀名过滤的相关知识点,以及实例代码分享,有需要的朋友跟着小编一起学习下。
    2018-02-02
  • spring security4 添加验证码的示例代码

    spring security4 添加验证码的示例代码

    本篇文章主要介绍了spring security4 添加验证码的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • SpringBoot处理全局统一异常的实现

    SpringBoot处理全局统一异常的实现

    这篇文章主要介绍了SpringBoot处理全局统一异常的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 详解eclipse将项目打包成jar文件的两种方法及问题解决方法

    详解eclipse将项目打包成jar文件的两种方法及问题解决方法

    本文给大家介绍了eclipse中将项目打包成jar文件的两种方法及其遇到问题解决方法,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2017-12-12
  • Java实现的猴子吃桃问题算法示例

    Java实现的猴子吃桃问题算法示例

    这篇文章主要介绍了Java实现的猴子吃桃问题算法,简单描述了猴子吃桃问题并结合实例形式给出了java解决猴子吃桃问题的具体实现技巧,需要的朋友可以参考下
    2017-10-10
  • javafx实现时钟效果

    javafx实现时钟效果

    这篇文章主要为大家详细介绍了javafx实现时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11

最新评论