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注入攻击,保证数据安全。