java編程——「Mybatis」之$和 的區別

前言

張星、之前在一線名企工作多年,級別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編程——「Mybatis」之$和 的區別


分享到:


相關文章: