sql映射文件中#{}和${}两者之间有什么区别

在MyBatis的SQL映射文件中,#{} 和 ${} 是两种用于插入变量值的方式。

1. #{}(预编译参数):(底层使用PrepareStatement)

    #{} 用于表示一个占位符,通常用于传递参数给SQL语句,这些参数会被MyBatis框架安全地转义和处理,以防止SQL注入攻击。

    #{} 会将参数值替换成一个占位符,并自动进行适当的转义和类型处理。这使得SQL语句更加安全,并且避免了潜在的安全风险。

<!-- 使用 #{userId} 占位符,会自动进行参数转义和类型处理 -->
SELECT * FROM users WHERE id = #{userId}

   如果传递 userId 参数的值为 1,MyBatis会将上述SQL语句转换为:

SELECT * FROM users WHERE id = 1

2. ${}(字符串替换):(底层使用Statement)

    ${} 用于字符串替换,它会将${}包裹的内容替换成参数的实际值,但不会进行转义或类型处理。

    使用${}时,你需要确保传递的参数值是安全的,以防止潜在的SQL注入攻击。因为参数值会直接插入到SQL语句中,不会受到额外的处理。

<!-- 使用 ${userId} 进行字符串替换,不会进行参数转义 -->
SELECT * FROM users WHERE id = ${userId}

   如果传递 userId 参数的值为 1,MyBatis会将上述SQL语句直接替换为:

SELECT * FROM users WHERE id = 1

总结:

 使用 #{} 更安全,因为它会自动进行参数转义和类型处理,可以有效防止SQL注入攻击。

 使用 ${} 时需要格外小心,确保传递的参数值是受信任和安全的,以避免潜在的风险。

 一般情况下,建议使用 #{},特别是在接受用户输入的参数时.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值