美文网首页
mybatis升级踩坑-结果采集器

mybatis升级踩坑-结果采集器

作者: 程序员老帮菜 | 来源:发表于2020-08-30 23:16 被阅读0次

最近在将老系统jdk升级1.8,考虑到项目中使用的spring与jdk版本兼容,spring与mybatis-spring及mybatis兼容,故以下jar包都做了相应升级

jar 升级前 升级后 备注
jdk 1.6 1.8
spring 3.2.4 5.1.9
mybatis-spring 1.0.1 1.3.2 mybatis与spring桥接
mybatis 3.0.5 3.4.6

根据jar包升级,向后兼容原则,认为此次变更除了由于包升级导致的类及方法的变更外,不会引起功能上的缺少,但往往问题就是这么出现了

项目启动后发现


定位代码


日志中输出的"null"字符串是由于String.valueOf导致,实际map.get("STATION_NO")返回值为null,分析map数据来源于数据库查询,且数据库中数据正常

通过mybatis mapper 分析是由于升级mybatis客户端导致查询结果映射出现问题导致。

分析两个版本结果集采集器源码

mybatis3.0.5
mybatis3.4.6

以上即为两个版本结果采集器代码对比,3.0.5版本结果采集器会解析出大写和小写两种属性名,而3.4.6只会按照条件解析出一种属性名;

再次分析项目中产生问题的原因,由于出问题的mapper未设置resultMapper映射关系,且sql中未指明字段别名(as XXX),mybatis配置文件也未声明使用驼峰方式(mapUnderscoreToCamelCase)转换属性名,因此在使用3.4.6版本后,属性名按照默认小写方式解析,在返回的map中不存在大写属性名("STATION_NO"),但是存在小写属性名,修改为小写属性名后,问题解决。

总结:
1.不建议直接使用map等非明确属性名的结构作为返回值,应使用java bean;
2.使用mybatis,建议开启驼峰映射方式或者mapper中指明resultMap,进行结果集映射;
3.在使用各类框架时,建议减少缺省配置,及时是默认方式,也要指定,避免出现版本处理方式不同导致的奇怪问题

相关文章

  • mybatis升级踩坑-结果采集器

    最近在将老系统jdk升级1.8,考虑到项目中使用的spring与jdk版本兼容,spring与mybatis-sp...

  • 踩坑一次

    好久没用Mybatis写东西了,结果在这个地方踩了坑 使用${}代替#{} 解释是:默认情况下, #{}语法会促使...

  • mybatis 踩坑

    1.mybatis generate 自动生成的xml默认增加行数,不覆盖,会生成多个resultMap2.核对...

  • mybatis-generator:generate 生成代码配

    mybatis-generator:generate 生成代码配置踩坑不少,在此留下笔记以便后续填坑 一、mysq...

  • MyBatis 踩坑笔记

    查询一个表中多个元素时,返回的List为空集合 现象 原Mapper中的select代码,Base_Column_...

  • mybatis对MySQL和SqlServer的like查询是不

    mybatis对MySQL和SqlServer的like查询是不同的。。。 已经踩了多少次坑了。。

  • AndroidX升级踩坑

    一、AndroidX介绍 鉴于Android support包版本依赖混乱,对实际开发不是很友好,经常出现依赖包重...

  • 升级cocoapods踩坑

    最近用的好好地cocoapods突然出了问题!!!记录一下在执行pod update时,报以下的错! [!] Fa...

  • MySQL+ Mybatis 下,mapper.xml用trun

    mybatis mapper.xml中,使用truncate,以及报错踩坑 注意:请采用占位的方式拼接表名波浪是 ...

  • 改mybatis到mybatis-plus的擎天巨坑

    兄弟们!mybatis-plus是号称对mybatis本身无侵入的一种加强版。但是当你引入它的时候,可能会广泛踩坑...

网友评论

      本文标题:mybatis升级踩坑-结果采集器

      本文链接:https://www.haomeiwen.com/subject/nktesktx.html