mybatis #{} 和 ${}


 以前印象里#{}可以防止注入,所以一直都是使用#{}。直到最近踩了坑,才去又理了一遍#{}和${}的區別。

事情是這樣,我在xml中寫sql的時候 查詢列的是不確定的 要由條件傳入。 我當時寫的sql如下:

SELECT #{XXXX} AS NUM FROM TABLE1。

但是我發現查詢結果是NUM這個字段的值一直是XXX。

查了下#{}和${}的區別才知道。 #{}會把里面的數據直接轉成字符串,所以我的SQL在被mybatis解析出來后就是 SELECT "XXX" AS NUM,這會直接將XXX值賦給NUM,所以導致了我查詢結果不對。

而${}並不會將里面的數據轉成字符串,還是要 SELECT XXX列。所以只用將#{}替換成${}就好了。

不過也正是因為 #{}多了一步轉成字符串的步驟,才能防止SQL注入。


免責聲明!

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



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