MyBatis中使用PreparedStatement進行參數綁定有多種方法,其中最常用的方法是使用#{}
和${}
。下面分別介紹這兩種方法的使用方式:
#{}
:在SQL語句中使用#{}
可以防止SQL注入攻擊,MyBatis會自動將參數轉義后傳遞給PreparedStatement,例如:
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
在上面的例子中,#{id}
會被MyBatis自動轉義成PreparedStatement
的setInt
方法,可以安全地傳遞參數給SQL語句。
${}
:在SQL語句中使用${}
可以直接將參數傳遞給PreparedStatement,但存在SQL注入的風險,不推薦使用,例如:
<select id="getUserByName" parameterType="String" resultType="User">
SELECT * FROM user WHERE name = ${name}
</select>
在上面的例子中,${name}
會直接替換成參數值,存在SQL注入的風險,不建議使用這種方式。
除了以上兩種方法,還可以使用@Param
注解來定義參數名稱,然后在SQL語句中引用參數名稱,例如:
public User getUserById(@Param("id") int id);
<select id="getUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
總的來說,推薦使用#{}
來進行參數綁定,以防止SQL注入攻擊,保證數據安全。