前言
張星、之前在一線名企工作多年,級別P8, 是企業的核心技術開發人員,目前有十三年的開發經驗。從事於Java後端開發,對分佈式架構、spring微服務、MySQL、框架、Netty、JVM、性能優化、等技術都有較深的研究
#{}表示佔位符:佔位符就是在某個地方佔領一個位置,把它單獨作為某個東西,比如這裡就是把它作為 值, #{}會被解析為“?”;
${}表示字符拼接:字符拼接就是簡單的對字符串拼接。沒有特殊的其它含義。
需求:根據用戶名稱模糊查詢用戶信息,返回多條記錄;下邊會以這個需求為線索,來解釋#{}和${}。
首先我們的查詢語句為:SELECT * FROM USER WHERE username LIKE ‘%小明%’;
在映射文件中我們先使用如下語句:SELECT * FROM USER WHERE username LIKE #{value};
然後在session中傳入參數“小明”;
測試打印出的sql語句如下:
“?”代表要傳入的參數,參數是“小明”,小明是字符串,會自動加引號,解析後的sql語句如下:SELECT * FROM USER WHERE username LIKE ‘小明’;缺少了模糊查詢需要的“%”,所以沒有得到我們需要的查詢結果。
如果映射文件中使用#{},我們只有將傳入的參數改為“%小明%”,便會成功;
但是可不可以將百分號固定到sql語句中,這樣就會避免忘記加%的情況。
SELECT * FROM USER WHERE username LIKE ‘%${value}%’
表示拼接字符串,將接收到參數的內容分不加任何修飾拼接在sql中。但是使用表示拼接字符串,將接收到參數的內容分不加任何修飾拼接在sql中。但是使用{}拼接,會產生sql注入。所以不建議使用,一般,一般{}用在我們能夠確定值的地方,也就是我們程序員自己賦值的地方。
所以我們在使用mybatis的時候,可以使用#的時候,儘量避免使用$方式!
閱讀更多 Java高併發框架 的文章