mybatis 為提供了兩種支持動態 sql 的語法:
(1)#{ }
解析為一個 JDBC 預編譯語句(prepared statement)的參數標記符
(2)${ }
在動態 SQL 解析階段將會進行變量替換
#{} 的參數替換是發生在 DBMS 中,而 ${} 則發生在動態解析過程中
區別:
#{}將傳入的參數當成一個字符串,會給傳入的參數加一個雙引號
${}將傳入的參數直接顯示生成在sql中,不會添加引號
#{}能夠很大程度上防止sql注入,${}無法防止sql注入
說明:
${}一般用於替換數據庫的表名、字段名等
能用#{}的地方盡量別用${}
eg:
動態調用表名和字段名
<select id="getLists" statementType="STATEMENT"> select ${columns} from ${tableName} where name= #{name} </select>
說明:
不使用預編譯,需添加statementType="STATEMENT"
STATEMENT(非預編譯),PREPARED(預編譯),默認為PREPARED