mybatis查詢無結果, 數據庫運行相同sql查詢出結果, 如下
創(chuàng)新互聯(lián)網站建設由有經驗的網站設計師、開發(fā)人員和項目經理組成的專業(yè)建站團隊,負責網站視覺設計、用戶體驗優(yōu)化、交互設計和前端開發(fā)等方面的工作,以確保網站外觀精美、成都網站制作、網站設計、外貿網站建設易于使用并且具有良好的響應性。
這是數據庫記錄
image.png
這是mybatis查詢出的結果, 記錄條數0
image.png
這是直接將控制臺一模一樣的sql查詢語句放到Navicat執(zhí)行的結果, 記錄條數1
image.png
將where
條件后的username = '${username}'
和and password = '${password}'
置為同一行
????
????
可以看到, 查詢結果一致
image.png
很多小伙伴都遇到過類似問題, 很懵逼, 難不成mybatis bug? 沒, 原因可能千萬種, 但根本原因基本上就一個, 那就是實際查詢語句與我們看到的sql不一致, 即, sql寫的有問題
再來分析一下上面這個問題, 看似xml sql沒有問題, 控制臺打印的sql也沒問題, 但放到數據庫執(zhí)行結果就不一致了, 因為, xml sql兩個條件換行了, mybatis實際執(zhí)行的sql是這樣的:
SELECT?id,?username,?password?FROM?user?where?username?=?'aaa'?#?''?and?password?=?'xxx'
并不是控制臺打印的sql:
SELECT?id,?username,?password?FROM?user?where?username?=?'aaa'?#?''?and?password?=?'xxx'
查詢結果自然不一致
本文只是提供一種解決類似問題的思路, 出錯原因可能不一樣, 但問題關鍵就是實際執(zhí)行的sql不一致, 才會導致mybatis和MySQL查詢結果不一致, 所以, 仔細點, 檢查sql
另, 本文是為了測試sql注入, 所以用的${username}
, 實際應該使用#{}
點擊獲取?附送學習進階架構資料、PDF書籍文檔、面試資料