1、#{ }是預編譯處理,MyBatis在處理#{ }時,它會将sql中的#{ }替換為?,然後調用PreparedStatement的set方法來指派;
2、 是 字 符 串 替 換 , M y B a t i s 在 處 理 { }是字元串替換, MyBatis在處理 是字元串替換, MyBatis在處理{ }時,它會将sql中的${ }替換為變量的值。
注意:使用${ }會導緻sql注入,不利于系統的安全性!
SQL注入:就是通過把SQL指令插入到Web表單送出或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL指令。常見的有匿名登入(在登入框輸入惡意的字元串)、借助異常擷取資料庫資訊等
應用場合:
1、#{ }:主要使用者擷取DAO中的參數資料,在映射檔案的SQL語句中出現#{}表達式,底層會建立預編譯的SQL;
2、 : 主 要 用 于 獲 取 配 置 文 件 數 據 , D A O 接 口 中 的 參 數 信 息 , 當 { }:主要用于擷取配置檔案資料,DAO接口中的參數資訊,當 :主要用于擷取配置檔案資料,DAO接口中的參數資訊,當出現在映射檔案的SQL語句中時建立的不是預編譯的SQL,而是字元串的拼接,有可能會導緻SQL注入問題.是以一般使用$接收dao參數時,這些參數一般是字段名,表名等,例如order by {column}。
注:
${}擷取DAO參數資料時,參數必須使用@param注解進行修飾或者使用下标或者參數#{param1}形式;
#{}擷取DAO參數資料時,假如參數個數多于一個可有選擇的使用@param。
作者:為生活而Coding
來源:CSDN
原文:https://blog.csdn.net/weixin_42759709/article/details/83015890
版權聲明:本文為部落客原創文章,轉載請附上博文連結!