MyBatis佔位符
阿新 • • 發佈:2018-11-26
MyBatis
#{value}
使用#{}意味著使用的預編譯的語句,即在使用jdbc時的preparedStatement,sql語句中如果存在引數則會使用?作佔位符,我們知道這種方式可以防止sql注入,並且在使用#{}時形成的sql語句,已經帶有引號,例,select * from table1 where id=#{id} 在呼叫這個語句時我們可以通過後臺看到打印出的sql為:select * from table1 where id=‘2’ 加入傳的值為2.也就是說在組成sql語句的時候把引數預設為字串。
{}時的sql不會當做字串處理,是什麼就是什麼,如上邊的語句:select * from table1 where id=${id} 在呼叫這個語句時控制檯列印的為:select * from table1 where id=2 ,假設傳的引數值為2
從上邊的介紹可以看出這兩種方式的區別,我們最好是能用#{}則用它,因為它可以防止sql注入,且是預編譯的,在需要原樣輸出時才使用${},如,
select * from ${tableName} order by ${id} 這裡需要傳入表名和按照哪個列進行排序 ,加入傳入table1、id 則語句為:select * from table1 order by id
如果是使用#{} 則變成了select * from ‘table1’ order by ‘id’ 我們知道這樣就不對了。
另,在使用以下的配置時,必須使用#{}
select * from message where id=#{id};在parameterType是int時,sql語句中必須是#{}