首页 > 其他分享 >异常解决!Mybatis实体类属性名和表中字段名不一致的处理方案

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

时间:2022-12-23 15:07:39浏览次数:41  
标签:xml 实体类 数据库 壹哥 名和表中 Mybatis 列名 属性


一. 前言

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

二. 分析

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

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

表的设计如下图所示:

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

实体类如下图所示:

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

mapper.xml文件如下所示:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

三. 结语

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

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

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

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

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

标签:xml,实体类,数据库,壹哥,名和表中,Mybatis,列名,属性
From: https://blog.51cto.com/u_7044146/5965713

相关文章

  • mybatis-学习笔记
    Mybatis1简介MyBatis是一款优秀的持久层框架它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBati......
  • 19.MyBatis
    介绍mybatis几乎消除了所有jdbc代码和参数的手工配置,mybatis可以使用简单的xml形式或者注解来配置原始映射工作原理......
  • Springboot+Mybatis+MySql下,mysql使用json类型字段存取的处理
    转载:Springboot+Mybatis+MySql下,mysql使用json类型字段存取的处理背景:1、mysql5.7开始支持json类型字段;2、mybatis暂不支持json类型字段的处理,需要自己做处理项目......
  • mybatisplus总结
    在学完了spring之后又去看了mybatisplus因为在学spring的过程中他有一部分讲解了一部分的springboot 然后也就尝试使用了 但是他一开始是用的mybatis进行数据库的操作......
  • MyBatis是如何初始化的?
    摘要:我们知道MyBatis和数据库的交互有两种方式有JavaAPI和Mapper接口两种,所以MyBatis的初始化必然也有两种;那么MyBatis是如何初始化的呢?本文分享自华为云社区《MyBatis详......
  • MyBatis是如何初始化的?
    摘要:我们知道MyBatis和数据库的交互有两种方式有JavaAPI和Mapper接口两种,所以MyBatis的初始化必然也有两种;那么MyBatis是如何初始化的呢?本文分享自华为云社区《​​MyBatis......
  • MyBatis的相应API与传统和代理开发的Dao层实现
    MyBatis的相应API1、SqlSession工厂构建器SqlSessionFactoryBuilder常用API:SqlSessionFactorybuild(InputStreaminputStream)通过加载mybatis的核心文件的输入流的形式构......
  • SSM(Spring 、SpringMVC 、Mybatis)框架整合
    1.引入依赖<!--引入spring相关--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.2.RELEAS......
  • mybatis-plus 多租户 自定义sql
    Mapper中增加注解即可实现自定义sqlpublicinterfaceSysCustomerConfigMapperextendsBaseMapper<SysCustomerConfig>{/***根据条件查询客户设置信息......
  • mybatis-plus的乐观锁
    什么是悲观锁?什么又是乐观锁?悲观锁是为了保证数据不被另外修改而增加的一种锁,具有独占性和排他性,在整个处理过程中数据都是被锁住的。适合于读少写多的情况。乐观锁是在......