$和#的区别
关于mybatis
mybatis是一个操作数据的框架,底层实现还是通过JDBC来完成。
在使用mybatis框架操作数据库时,需要写配置文件,其中关于sql的xml文件中,有两种取值方式:使用$和#。
$:获取的是传过来的对象的属性,仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换。
#:解析为一个 JDBC 预编译语句(prepared statement)的参数标记符,一个 #{ } 被解析为一个参数占位符 。
操作演示
xml文件配置sql语句,完成更新数据。
<!--更新-->
<update id="update" parameterType="cn.itsource.domain.Product">
update product set productName = #{productName},
dir_id = #{dir_id},salePrice = #{salePrice},
supplier = #{supplier},brand = #{brand},
cutoff = #{cutoff},costPrice = #{costPrice}where id = ${id}
</update>
在上面的sql语句中,id使用了$来取值,可以完成功能。
查看日志打印的sql语句:
可以看出:使用 $是直接拼接字符串。 而使用#是占位符,可以防止sql注入,更加安全。