Mybatis Sql語句#{},和 ${}傳參的區別

#{},和 ${}傳參的區別以下: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;注入

相關文章
相關標籤/搜索