#{}与${}的区别
默認情況下,使用#{}語法,MyBatis會產生PreparedStatement語句中,并且安全的設置PreparedStatement參數,這個過程中MyBatis會進行必要的安全檢查和轉義。
示例1:
執行SQL:Select * from emp where name = #{employeeName}
參數:employeeName=>Smith
解析后執行的SQL:Select * from emp where name = ?
執行SQL:Select * from emp where name = ${employeeName}
參數:employeeName傳入值為:Smith
解析后執行的SQL:Select * from emp where name =Smith
說明:
1. #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #{user_id},如果傳入的值是111,那么解析成sql時的值為order by “111”, 如果傳入的值是id,則解析成的sql為order by “id”.
2. $將傳入的數據直接顯示生成在sql中。如:order by ${user_id},如果傳入的值是111,那么解析成sql時的值為order by 111, 如果傳入的值是id,則解析成的sql為order by id.
綜上所述,${}方式會引發SQL注入的問題、同時也會影響SQL語句的預編譯,所以從安全性和性能的角度出發,能使用#{}的情況下就不要使用${}。
${}在什么情況下使用呢?
有時候可能需要直接插入一個不做任何修改的字符串到S
總結
以上是生活随笔為你收集整理的#{}与${}的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Sublime text总是弹出U
- 下一篇: 【APICloud系列|36】小米应用商