对于 $
和 #
在MyBatis中的区别,主要涉及到参数的处理方式和SQL注入的安全性。
在MyBatis中,可以使用 $
或 #
来引用参数,但它们有以下区别:
$
符号:$
符号表示参数的直接替换。在SQL语句中,MyBatis会将$
符号和参数的值直接替换进去。- 使用
$
进行参数替换时,要注意潜在的SQL注入风险。因为参数值直接替换,如果参数值未经过严格的校验和转义,可能会导致SQL注入攻击。
示例:
<!-- 使用$引用参数,直接替换参数值 -->
<select id="getUserByName" parameterType="String" resultType="User">
SELECT * FROM user WHERE name = '${name}'
</select>
#
符号:#
符号表示参数的占位符。在SQL语句中,MyBatis会将#
符号替换成对应的参数占位符,并使用PreparedStatement来预编译SQL语句。- 使用
#
进行参数占位符替换可以提高SQL的安全性,因为参数值会进行转义和参数化处理,减少了SQL注入的风险。
示例:
<!-- 使用#引用参数,作为参数占位符 -->
<select id="getUserByName" parameterType="String" resultType="User">
SELECT * FROM user WHERE name = #{name}
</select>
总结: 在MyBatis中,使用 $
或 #
引用参数,主要区别在于 $
是直接替换参数值,#
是参数占位符进行转义和参数化处理。使用 #
能够提高SQL的安全性,避免SQL注入的风险。