來源:https://url.cn/5bGWOIs
mybatis查詢無結果, 數據庫運行相同sql查詢出結果, 如下
這是數據庫記錄
這是mybatis查詢出的結果, 記錄條數0
這是直接將控制檯一模一樣的sql查詢語句放到Navicat執行的結果, 記錄條數1
解決辦法
將 where條件後的 username='${username}'和 andpassword='${password}'置為同一行
可以看到, 查詢結果一致
異常分析
- 很多小夥伴都遇到過類似問題, 很懵逼, 難不成mybatis bug? 沒, 原因可能千萬種, 但根本原因基本上就一個, 那就是實際查詢語句與我們看到的sql不一致, 即, sql寫的有問題
- 再來分析一下上面這個問題, 看似xml sql沒有問題, 控制檯打印的sql也沒問題, 但放到數據庫執行結果就不一致了, 因為, xml sql兩個條件換行了, mybatis實際執行的sql是這樣的:
並不是控制檯打印的sql:
查詢結果自然不一致
總結
本文只是提供一種解決類似問題的思路, 出錯原因可能不一樣, 但問題關鍵就是實際執行的sql不一致, 才會導致mybatis和mysql查詢結果不一致, 所以, 仔細點, 檢查sql
另, 本文是為了測試sql注入, 所以用的 ${username}, 實際應該使用 #{}
我自己是一名從事了多年開發的Java老程序員,辭職目前在做自己的Java私人定製課程,今年年初我花了一個月整理了一份最適合2019年學習的Java學習乾貨,從最基礎的JavaSE到Spring各種框架都有整理,送給每一位Java小夥伴,想要獲取的可以關注我的頭條號並在後臺私信我:Java,即可免費獲取。
閱讀更多 Java架構人生 的文章