在Mybtis中的Mapper映射文件中,sql語句傳參有兩種方式#{}和${}
一般來說,我們通常使用的是#{},這里采用的是預編譯機制,防止SQL注入,將#{}中的參數轉義成字符串,例如:
執行SQL:Select * from users where username = #{username}
參數:username=lxd
解析后執行的SQL:Select * from users where username = ?
執行SQL:Select * from users where name = ${username}
參數:username傳入值為:lxd
解析后執行的SQL:Select * from users where username =lxd
#{} 和 ${} 在預編譯中的處理是不一樣的。#{} 在預處理時,會把參數部分用一個占位符 ? 代替,變成如下的 sql 語句:
select * from user where username = ?;
而 ${} 則只是簡單的字符串替換,在動態解析階段,該 sql 語句會被解析成
select * from user where username = 'lxd';
表名用參數傳遞進來的時候,只能使用 ${}