JAVA面试题:Mybatis中使用${}和#{}的区别

一、先说结论

在使用 MyBatis 进行数据库操作时,`#{} 用于参数绑定,会生成预处理语句,使用 ? 占位符,可以防止 SQL 注入;而 ${} 是直接字符串替换,会将参数值直接嵌入到 SQL 语句中,无法防止 SQL 注入,要谨慎使用。

二、#{}使用案例

  • #{} 是 MyBatis 的一种语法,用于将参数值绑定到 SQL 语句中,并使用 ?` 作为占位符。 它能够防止 SQL 注入,
  • MyBatis 会将参数值作为绑定变量传递给数据库驱动程序,该驱动程序会对参数进行适当的转义处理。
<select id="selectStudentById" parameterType="int" resultType="Student">
    SELECT * FROM Students WHERE id = #{id}
</select>

在这个例子中,#{id} 会被替换为一个 ? 占位符,并且实际的参数值会被安全地绑定到 SQL 语句中。 

三、${}使用案例

  • ${} 是 MyBatis 的另一种语法,用于直接将参数值嵌入到 SQL 语句中。
  • 它不会进行预处理,也不会使用 ? 占位符,而是直接将参数值插入到 SQL 语句中。
  • 由于直接将参数值嵌入到 SQL 中,因此不能防止 SQL 注入,需要非常小心使用。
<select id="selectStudentById" parameterType="int" resultType="Student">
    SELECT * FROM Students WHERE id = ${id}
</select>

在这个例子中,${name} 会被直接替换为参数值,如果参数值包含恶意的 SQL 代码,就有可能导致 SQL 注入。

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值