#
將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #{user_id}
,如果傳入的值是111,那麼解析成sql時的值爲order by "111"
, 如果傳入的值是id,則解析成的sql爲order by "id"
。$
將傳入的數據直接顯示生成在sql中。如:order by ${user_id}
,如果傳入的值是111,那麼解析成sql時的值爲order by 111
, 如果傳入的值是id,則解析成的sql爲order by id
。#
方式能夠很大程度防止sql注入。$
方式無法防止Sql注入。$
方式一般用於傳入數據庫對象,例如傳入表名。- 一般能用
#
的就別用$
。
ps: 在使用mybatis中還遇到<![CDATA[]]>
的用法,在該符號內的語句,將不會被當成字符串來處理,而是直接當成sql語句,比如要執行一個存儲過程。
所以order by
之後要使用$
而非#
。