• 异常解决!Mybatis实体类属性名和表中字段名不一致的处理方案


    一. 前言

    最近壹哥有学生出去面试,被问到 “Mybatis实体类的属性名和表中的字段名不一致该怎么处理?”,这其实是一个很经典的面试题,接下来壹哥就为大家详细解析一下这道面试题。

    二. 分析

    2.1 实体类和字段名不一致所带来的后果

    为了讲清楚这个问题,我们先来设计下面这样一个案例。

    表的设计如下图所示:

    实体类如下图所示:

    mapper.xml文件如下所示:

    根据主键查询TbAccount对象的方法,我们发现【只有数据库中的字段和实体类的属性名字对得上的字段才能被查出来

    那么以上的这个问题该怎么解决呢?壹哥给大家提出了如下两种解决方案。

    2.2 解决方案一:将resultType替换为resultMap

    我们需要先在mapper.xml文件中创建resultMap。

    然后在mapper.xml文件的select方法节点中,把resultType替换为resultMap。

    再一次根据主键查询TbAccount对象的方法,我们此时会发现,即使【数据库的列名和实体类的属性名对不上的字段也能查出来了

    2.3 解决方案二:配置下划线和驼峰的映射关系

    第二种解决方案,首先要在mybatis核心配置文件中添加下划线和驼峰的映射配置。

    然后把mapper.xml文件中select查询节点中的resultMap再恢复成resultType。

    再一次根据主键查询TbAccount对象的方法,我们会发现【数据库的列名和实体类的属性名对不上的字段,此时依然能查出来

    三. 结语

    以前也经常有学生问壹哥,[既然实体类的属性名和数据库的列名对不上会有问题,那我们在创建实体类的时候,让实体类的属性名跟数据库的字段名保持一致不就解决问题了吗?]

    其实这个事情是这样的,现在所有的公司对于Java变量的命名规范和数据库列名的命名规范要求不一致!Java的变量命名规范是驼峰命名法,数据库的列名命名规范是下划线区分单词命名法,这样Java实体类和数据库列名不一致成了一种常态。

    为了尽量避免这种不一致造成的问题,我们可以在进行项目开发时参照阿里巴巴的开发规约,如下图所示:

    现在你知道这个面试题该怎么解决及回答了吗?如果你还有其他问题,可以在评论区给壹哥留言哦。 

  • 相关阅读:
    【算法】递归总结:循环与递归的区别?递归与深搜的关系?
    电商平台物流模块自建OR对接第三方物流平台
    .NET6 命令行启动及发布单个Exe文件
    关于python的内存管理机制和python变量占用内存及时释放的问题
    Log4j日志框架讲解(全面,详细)
    【计算机网络】B类IP地址
    快速采集微信联系人昵称列表并转发多条消息
    Fuxploider:一款针对文件上传漏洞的安全检测与研究工具
    Python中给字典排序的三种方法(有一种你绝对没见过)
    Unity3D 多线程定时器的原理与实现详解
  • 原文地址:https://blog.csdn.net/syc000666/article/details/126241596