美文网首页
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升级踩坑-结果采集器

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