記一次idea環境導致的資料庫報錯
阿新 • • 發佈:2019-01-26
1. 問題
下午測試一個get介面時,mybatis一直報錯,有如下兩個異常資訊:
- MyBatisSystemException with kryo’s ClassLoader. Retrying with current
- Expected one result to be returned by selectone(),but found 344
本身入參是一個id,查出來的資料應該是一個,但是此時提示查出表中所有的資料,所以報異常了。
2. 程式碼業務
- 資料庫語句,so easy
@Override public AccessPolicyAnalysisResult get(AccessPolicyAnalysisResult model) throws ServiceException { return super.get(model); }
- mybatis對應的xml語句
<select id="get" resultType="AccessPolicyAnalysisResult"> <include refid="access_policy_analysis_mapping_column"/> <where> <if test="globalId != null "> and global_id = #{globalId} </if> <if test="applyId != null "> and apply_id = #{applyId} </if> </where> limit 1 </select>
3. 定位思路
- 首先當然是檢查程式碼,但是未發現異常;
- 手動執行sql語句,可以正常查出一條資料;
- 因為公司的框架,log設定成debug,就可以列印sql語句了。所以修改成debug,發現什麼log都沒有,正常的業務log也沒有。此時感覺可能和環境有關。
- 重啟idea,專案沒有自動載入,然後手動匯入專案,配置maven、jdk,再次啟動tomcat,問題解決。
4. 問題原因
我在除錯這個介面之前,修改了一下mapper.xml配置檔案,因為我的入參是applyId不是主鍵,所以我添加了上面sql語句中的如下內容:
<if test="applyId != null "> and apply_id = #{applyId} </if>
增加這個判斷之後,並沒有重新編譯專案,直接啟動tomcat,導致tomcat並沒有載入到變更。此時通過applyId查詢不到特定的那條資料,故出現以上異常。
5. 問題總結
問題不復雜,但是耽誤了一些時間;教訓就是,遇到問題要多思考,尤其是這種感覺程式碼沒有問題的時候,可以想想外觀因素。不能盲目的一直定位程式碼問題。