-
#{變量名}可以進行預編譯、類型匹配等操作,#{變量名}會轉化為jdbc的類型。
select * from tablename where id = #{id}
假設id的值為12,其中如果數據庫字段id為字符型,那么#{id}表示的就是'12',如果id為整型,那么id就是12,並且MyBatis會將上面SQL語句轉化為jdbc的select * from tablename where id=?,把?參數設置為id的值。 -
${變量名}不進行數據類型匹配,直接替換。
select * from tablename where id = ${id}
如果字段id為整型,sql語句就不會出錯,但是如果字段id為字符型, 那么sql語句應該寫成select * from table where id = '${id}'。 -
#方式能夠很大程度防止sql注入。
-
$方式無法方式sql注入。
-
$方式一般用於傳入數據庫對象,例如傳入表名。
-
盡量多用#方式,少用$方式。