㈠ mybatis中的sql語句中的#佔位符和$佔位符有什麼區別
#{},和 ${}傳參的區別如下:
使用#傳入參數是,sql語句解析是會加上"",當成字元串來解析,這樣相比於$的好處是比較明顯對的吧,#{}傳參能防止sql注入,如果你傳入的參數為 單引號',那麼如果使用${},這種方式 那麼是會報錯的
另外一種場景是,如果要做動態的排序,比如 order by column,這個時候務必要用${}
select * from table order by 'name' ,這樣是沒用
目前來看,能用#就不要用$,
㈡ 淺談mybatis中的#和$的區別 以及防止sql注入的方法
淺談mybatis中的#和$的區別 以及防止sql注入的方法
#{ } 解析為一個 JDBC 預編譯語句(prepared statement)的參數標記符。
例如,sqlMap 中如下的 sql 語句
select * from user where name = #{name};
解析為:
select * from user where name = ?;
一個 #{ } 被解析為一個參數佔位符 ? 。
${ } 僅僅為一個純碎的 string 替換,在動態 SQL 解析階段將會進行變數替換