昨晚加班的时候被队友拉着看一个mybatis的问题,耗费了我一个小时时间,最后差点没被我打死,实在是觉得滑稽,今天回家写下来跟大伙分享一下。
问题现象
Invalid bound statement (not found),看到这个错我当时就没兴趣了,我说你这不就是xml里没写xxxMapper.java方法对应的语句吗,这还有啥犹豫的呢,检查你的xml啊。
队友说,哥,我检查好多遍了,实在是找不出原因啊,这类问题常见的出错原因也就以下几类:
1.检查xml文件所在namespace名称是否和Mapper interface所在的包名一样;
2.mapper的XML配置路径是否正确
3.xml里没写xxxMapper.java方法对应的语句
4、5、6
。。。。。。
罢了罢了,出问题的时候都说自己没问题,眼见为实,我还是自己检查一遍。
差点打脸
我把常见的报错原因挨着检查了一遍,愣是没发现问题,场面一度尴尬,还debug了半天mabatis的源码,然并卵,最终我决定解压jar包看看里面究竟有没有那个xml文件。
乍一看似乎没有问题,xml是存在的,里面的<Select>也是存在的,停顿三秒钟。
水落石出
mybatis.mapper.upgrade这个目录,看起来有点奇怪,怎么没有层级。
“啊,这还有层级,我以为是目录的名字呢,我是这么建的”
搞半天你小子是建了个名字叫“mybatis.mapper.upgrade”的目录,你是怎么想的?
你的mapperLocations设置的是classpath:mybatis/mapper/upgrade*/*.xml,怎么想mybatis/mapper/upgrade这也是个多级目录啊?
“我参考enterprise那个服务弄的,enterprise里的mapper目录就叫mybatis.mapper.enterprise,也没有层级。"
那个是有层级的,只是你的idea设置了“Compact Middle Packages”导致展示成了mybatis.mapper.enterprise而已,你把"Compact Middle Packages"取消了再看。
“是的,取消了以后层级确实出来了"
到这问题已经水落石出,白白浪费一小时时间,也反映出队友的mybatis基础有待提升,这个操作着实有点滑稽。
你曾经遇到过队友的哪些神奇操作?
照片拍摄于西安大唐西市