mybatis中#和$符號的區別


mybatis做為一個輕量級ORM框架在許多項目中使用,因其簡單的入門受到了廣大開發者的熱愛。在近期項目中再做一個相關的開發,碰到了#、$符號這樣的問題,之前沒怎么注意過,通過學習之后,有了點感悟,分享如下,

#{} 

使用#{}意味着使用的預編譯的語句,即在使用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 id="selectMessageByIdI" parameterType="int" resultType="Message">
         
         select * from message where id=#{id};
     </select>


在parameterType是int時,sql語句中必須是#{}。

 

有不對之處歡迎之處!謝謝


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM