Java的Mybatis框架中#{}与${}使用心得

Java的Mybatis框架中#{}与${}使用心得
在这里插入图片描述

在MyBatis框架中,#{}和${}都是用来动态地向SQL语句中插入值的,但它们的处理方式和用途有所不同

#{}

安全:#{}是预编译处理,能够有效防止SQL注入。它会将参数看作一个占位符,在SQL执行前,MyBatis会使用PreparedStatement参数化的方式处理这些值,即将参数替换为问号(?),然后由数据库驱动程序负责处理参数化的过程。
这样可以确保传入的参数被正确转义,避免SQL注入的风险。

用法示例:在映射文件中,如果你看到如:

SELECT * FROM table WHERE id = #{id}

这样的语句,这里的#{id}会被实际传入的id值安全地替换。

${}

不安全:${}不会进行预编译处理,而是直接进行字符串替换。这意味着传入的参数将会原样拼接到SQL语句中,如果参数中含有恶意代码,可能会导致SQL注入攻击。

用途:尽管因为安全性问题不推荐用于包含用户输入的参数,但它在某些特定场景下非常有用,比如动态表名、列名或者SQL片段等,这些内容不是用户提供的,而是程序内部确定的,使用因为安全性问题不推荐用于包含用户输入的参数,但它在某些特定场景下非常有用,比如动态表名、列名或者SQL片段等,这些内容不是用户提供的,而是程序内部确定的,使用{}可以直接拼接SQL。

用法示例:若需要根据某个条件动态生成表名,可能会这样写
SELECT * FROM t a b l e N a m e W H E R E . . . ,这里 {tableName} WHERE ...,这里 tableNameWHERE...,这里{tableName}会被其对应的变量值直接替换到SQL中。

总结

通常情况下,当你需要传递参数到SQL查询中时,推荐使用#{}来防止SQL注入,保护应用的安全性。
如果你需要拼接SQL片段或者动态生成SQL结构部分(而非查询条件),可以使用${},但需谨慎使用,确保不会引入安全风险。

了解更多知识请戳下:

@Author:懒羊羊

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会撸代码的懒羊羊

打赏5元,买杯咖啡醒,继续创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值