回覆列表
  • 1 # 使用者928021938244

    #{ } 解析為一個 JDBC 預編譯語句(prepared statement)的引數標記符。

    例如,sqlMap 中如下的 sql 語句

    select * from user where name = #{name};

    解析為:

    select * from user where name = ?;

    一個 #{ } 被解析為一個引數佔位符 ? 。

    ${ } 僅僅為一個純碎的 string 替換,在動態 SQL 解析階段將會進行變數替換

    例如,sqlMap 中如下的 sql

    select * from user where name = "${name}";

    當我們傳遞的引數為 "ruhua" 時,上述 sql 的解析為:

    select * from user where name = "ruhua";

    預編譯之前的 SQL 語句已經不包含變數 name 了。

    綜上所得, ${ } 的變數的替換階段是在動態 SQL 解析階段,而 #{ }的變數的替換是在 DBMS 中。

    注意:${ } 在預編譯之前已經被變數替換了,這會存在 sql 注入問題。

  • 2 # 人販子姐姐

    #將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。 $將傳入的資料直接顯示生成在sql中 #方式能夠很大程度防止sql注入,$方式無法防止Sql注入,一般能用#的就別用$.

  • 中秋節和大豐收的關聯?
  • 我在原地等待風起是什麼歌?