MyBatis中#{}與${}的使用

含義

  • #{}: 爲佔位符

  • ${}: 爲拼接符

MyBatis 中 #{} 和 ${} 的主要區別

  • # 傳入的參數在 SQL 中顯示爲字符串,# 方式能夠很大程度防止 SQL 注入
  • $ 傳入的參數在 SQL 中直接顯示爲傳入的值,$ 方式無法防止 SQL 注入

其他區別

  • 傳入的參數在 SQL 中顯示不同
    • #{} 爲參數佔位符?,即 SQL 預編譯
    • # 傳入的參數在 SQL 中顯示爲字符串(當成一個字符串),會對自動傳入的數據加一個雙引號。
    • ${} 爲字符串替換,即字符串拼接
    • $ 傳入的參數在 SQL 中直接顯示爲傳入的值
  • # 可以防止 SQL 注入的風險(語句的拼接);但 $ 無法防止 SQL 注,入。
  • $ 方式一般用於傳入數據庫對象,例如,傳入表名。
  • 大多數情況下還是經常使用 #,一般能用 # 的就別用 $;但有些情況下必須使用 $,例:MyBatis 排序時使用 Order By 動態參數時需要注意,用 $ 而不是 #。
  • 執行流程
    • #{}:動態解析 --> 預編譯 --> 運行
    • ${}:動態解析 --> 編譯 -->運行
  • 變量替換
    • ​​​​​​​#{}:變量替換是在DBMS(數據庫管理系統)中,會對對應的變量自動加上''
    • ${}:變量替換實在DBMS外,不會對對應的變量加上''
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章