#{},和 ${}傳參的區別以下:sql
使用#傳入參數時,sql語句解析是會加上"",當成字符串來解析,這樣相比於$的好處是比較明顯對的吧,#{}傳參能防止sql注入,若是你傳入的參數爲 單引號',那麼若是使用${}這種方式會報錯排序
另一種場景是,若是要作動態的排序,好比 order by column,這個時候務必要用${}字符串
select * from table order by 'name' ,這樣是沒用table
目前來看,能用#就不要用$。select
可是${}在什麼狀況下使用呢?sql語句
有時候可能須要直接插入一個不作任何修改的字符串到SQL語句中。這時候應該使用${}語法。語法
好比,動態SQL中的字段名,如:ORDER BY ${columnName} (動態排序還能夠使用<if> <choose> 等判斷語句來區別處理代替傳參方式)sql注入
#{}在預處理時會把參數部分用一個佔位符:? 代替,eg:select * from user where id = ?;tab
${}只是簡單的字符串拼接,在動態解析階段就直接拼接成了最終的sql語句:select * from user where id = 1;注入