mybatis中sql語句必須用${}而不能不用#{}的情況
阿新 • • 發佈:2020-09-19
在mybatis中如果我們使用#{}的方式編寫的sql時,#{} 對應的變數自動加上單引號 ' '
例如:
select * from #{param}
當我們給引數傳入值為user時,他的sql是這樣的:
select * from 'user'
引數user上會帶著單引號,而單引號在mysql中會被識別為字串,select一個字串肯定是會報錯的。
而如果我們使用${}的方式編寫的sql時,${} 是進行sql拼接,${}對應的變數是不會被加上單引號 ' ' 的。
select * from ${param}
輸出的sql為
select * from user
總結一下,就是當我們需要拼接的變數上不能帶單引號時,就必須使用${},其他情況都儘量使用#{}的方式,因為${}會有sql注入的問題。
常見的使用${}的情況:
1.當sql中表名是從引數中取的情況
2.order by排序語句中,因為order by 後邊必須跟欄位名,這個欄位名不能帶引號,如果帶引號會被識別會字串,而不是欄位。