昨晚加班的時候被隊友拉着看一個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基礎有待提升,這個操作着實有點滑稽。
你曾經遇到過隊友的哪些神奇操作?
照片拍攝於西安大唐西市