1、#是預編譯處理,mybatis在處理#時,它會將sql中的#替換為?,然後呼叫preparedstatement的set方法來賦值;
2、是 字元
串替換,
myba
tis在
處理
是字串替換, mybatis在處理
是字串替換
,myb
atis
在處理時,它會將sql中的$替換為變數的值。
注意:使用$會導致sql注入,不利於系統的安全性!
sql注入:就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。常見的有匿名登入(在登入框輸入惡意的字串)、借助異常獲取資料庫資訊等
應用場合:
1、#:主要使用者獲取dao中的引數資料,在對映檔案的sql語句**現#{}表示式,底層會建立預編譯的sql;
2、: 主要
用於獲取
配置檔案
資料,d
ao介面
中的引數
資訊,當
:主要用於獲取配置檔案資料,dao介面中的引數資訊,當
:主要用於獲
取配置文
件資料,
dao接
口中的參
數資訊,
當出現在對映檔案的sql語句中時建立的不是預編譯的sql,而是字串的拼接,有可能會導致sql注入問題.所以一般使用$接收dao引數時,這些引數一般是欄位名,表名等,例如order by 。
注:${}獲取dao引數資料時,引數必須使用@param註解進行修飾或者使用下標或者引數#形式;
Mybatis中 和 有什麼區別
一般說來,二者的區別可總結為以下6點 1 將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2 將傳入的資料直接顯示生...
mybatis中 跟 有什麼區別
動態 sql 是 mybatis 的強大特性之一,mybatis 在對 sql 語句預編譯前,會對 sql 進行動態解析,解析為乙個 boundsql 物件,在動態 sql 解析階段,和 的不同 可以防止sql注入.先把sql中使用 的地方變成?佔位符,再設定引數值 insert into stud...
Mybatis系列 和 有什麼區別?
當我們在應用變數的時候預設使用 如下 select from user where id select from user where id 通過上面的例子好像並沒有看出他們之間有什麼區別 新增日誌依賴 org.slf4j slf4j api 1.7.5 org.slf4j slf4j log4j1...