程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Mybatis中#{}和${}傳參的差別及#和$的差別小結

Mybatis中#{}和${}傳參的差別及#和$的差別小結

編輯:關於JAVA

Mybatis中#{}和${}傳參的差別及#和$的差別小結。本站提示廣大學習愛好者:(Mybatis中#{}和${}傳參的差別及#和$的差別小結)文章只能為提供參考,不一定能成為您想要的結果。以下是Mybatis中#{}和${}傳參的差別及#和$的差別小結正文


比來在用mybatis,之前用過ibatis,整體來講差不多,不外照樣碰到了很多成績,再次記載下,

好比說用#{},和 ${}傳參的差別,

應用#傳入參數是,sql語句解析是會加上"",好比 select * from table where name = #{name} ,傳入的name為小李,那末最初打印出來的就是

select * from table where name = ‘小李',就是會當做字符串來解析,如許比擬於$的利益是比擬顯著對的吧,#{}傳參能避免sql注入,假如你傳入的參數為 單引號',那末假如應用${},這類方法 那末是會報錯的,

別的一種場景是,假如你要做靜態的排序,好比 order by column,這個時刻務需要用${},由於假如你應用了#{},那末打印出來的將會是

select * from table order by 'name' ,如許是沒用,

今朝來看,能用#就不要用$,

mybatis中的#和$的差別

1. #將傳入的數據都當做一個字符串,會對主動傳入的數據加一個雙引號。如:order by #user_id#,假如傳入的值是111,那末解析成sql時的值為order by "111", 假如傳入的值是id,則解析成的sql為order by "id".

2. $將傳入的數據直接顯示生成在sql中。如:order by $user_id$,假如傳入的值是111,那末解析成sql時的值為order by user_id, 假如傳入的值是id,則解析成的sql為order by id.

3. #方法可以或許很年夜水平避免sql注入。 

4.$方法沒法避免Sql注入。

5.$方法普通用於傳入數據庫對象,例如傳入表名. 

6.普通能用#的就別用$.

MyBatis排序時應用order by 靜態參數時須要留意,用$而不是#

字符串調換

默許情形下,應用#{}格局的語法會招致MyBatis創立預處置語句屬性並以它為配景設置平安的值(好比?)。如許做很平安,很敏捷也是首選做法,有時你只是想直接在SQL語句中拔出一個不轉變的字符串。好比,像ORDER BY,你可以如許來應用:

ORDER BY ${columnName}

這裡MyBatis不會修正或本義字符串。

主要:接收從用戶輸入的內容並供給給語句中不變的字符串,如許做是不平安的。這會招致潛伏的SQL注入進擊,是以你不該該許可用戶輸出這些字段,或許平日自行本義並檢討。

Mybatis中$和#的差別簡略小結

前不久,有人來我們公司面試,我們的司理問道了這個成績,我也是一知半解,所以就去百度了一番。

其實差別很簡略的,舉個例子年夜家就會明確的。寫一句SQL-例如:select * from user_role where user_code = "100";

這句話而言,須要寫成 select * from ${tableName} where user_code = #{userCode}

所以,$符是直接拼成sql的 ,#符則會以字符串的情勢 與sql停止拼接。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved