mybatis利用動態SQL進行模糊查詢遇到的問題


問題

mybatis利用動態SQL進行模糊查詢, 但查詢的結果始終是0行, 經過分析發現了問題所在

場景

我使用的是mybatis-plus



圖組1 表結構及索引

圖2 userMapper接口

key是模糊查詢的字段如username, phone, email
value是模糊值, 如sss, 然后使用動態SQL組合成%sss%


圖3 錯誤的SQL語句

其中<bind>是為了拼接模糊查詢的條件, 為了防止SQL注入不能使用%${}%的寫法, 查詢


圖4 始終沒有查詢到結果

解決

先開啟控制台打印mybatis執行的SQL語句


圖5 mybatis-plus開啟執行SQL的日志

mybatis-plus即配置log-impl即可log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mybatis原生可自行搜索mybatis 顯示執行的SQL語句

運行, 分析控制台輸出結果


圖6 控制台輸出結果

整體來說SQL沒有寫錯, 模糊查詢的%也連接正常

經過仔細發現username字段是一個字符串類型, 而平常寫SQL條件查找好像從來沒寫過字符串, 我用navicat做了一下實驗


圖7 username條件為字符串時

圖8 username條件不是字符串時

到這里我才明白了, 條件的字段不能寫成字符串, 因為以前沒遇到過這樣的問題

修改mapper, 先用動態SQL的if判斷字符串


圖9 修改后的mapper

重啟一下服務, 再進行查詢


圖10 效果

可以正常運行並能正確返回匹配模糊條件的結果

總結

用SQL進行模糊查詢, 需要注意


圖11 注意

where后的字段必須 不能是字符串
like后的模糊條件 必須是字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM