MyBatis中 與 有什麼區別

2021-09-24 15:33:40 字數 809 閱讀 7625

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...