在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 后邊必須跟字段名,這個字段名不能帶引號,如果帶引號會被識別會字符串,而不是字段。
