天天看點

MyBatis中${ }與#{ }有什麼差別?

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

版權聲明:本文為部落客原創文章,轉載請附上博文連結!