#{}和${}是MyBatis中用來傳遞參數(shù)的兩種方式。
- #{}:在SQL語句中使用#{}表示一個(gè)占位符,MyBatis會(huì)使用PreparedStatement來處理這個(gè)占位符,可以防止SQL注入攻擊。#{}會(huì)將傳入的參數(shù)按照J(rèn)DBC規(guī)范進(jìn)行處理,比如自動(dòng)添加單引號(hào),轉(zhuǎn)義特殊字符等。
示例:
<select id="getUserById" resultType="User">
SELECT * FROM user WHERE id = #{userId}
</select>
- ${}:在SQL語句中使用${}表示一個(gè)變量,MyBatis會(huì)將${}替換為實(shí)際的參數(shù)值,然后拼接到SQL語句中。使用${}需要注意SQL注入攻擊的風(fēng)險(xiǎn),因?yàn)閰?shù)值會(huì)直接替換到SQL語句中。
示例:
<select id="getUserByName" resultType="User">
SELECT * FROM user WHERE name = '${userName}'
</select>
因此,推薦使用#{}的方式來傳遞參數(shù),以防止SQL注入攻擊。