Mybatis中 # 和 $的区别

Mybatis中 # 和 $的区别

在Mybatis中。我们使用mapper引用变量时,都是默认使用#号,但是也可以使用$,那他们有什么区别呢?
我们需要先了解一下

sql语句的预编译和拼接的区别

String sql = "select * from user where id = " + id;
这里就是属于sql语句的拼接了,
什么叫做拼接呢?
就是我们输入的会自动拼接在后面
假设我们可以输入这样一句 id or 1 = 1
那么数据库会理解成以下这样:
select * from user where id = id or 1 = 1;
执行的时候,虽然 在数据库中找不到一个id 是id 的人,但是 1 =1 是恒成立的,所以数据库里的数据还是会被查询到,

但是如果我们用的是预编译方式
String sql = “select * from user where id = ?”
这里的问号相当于一个占位符,就像是一个参数,我们需要输入一个参数。
如果我们也输入 id or 1 =1
那么在预编译的情况下,会把这个当做一个整体,会去数据库中查询时候有一个id为 id or 1 = 1的人,显然是没有的,所以不会暴露出数据库中的数据。这也是就防sql注入攻击的原理。

显然 # 和 $ 也是一样的原理

#{}也相当与一个占位符,采用的是预编译的处理方式,
而${}采用的是字符串拼接的方式,这是一种不安全的行为,
所以我们在一般情况下都是用占位符方式,也就是#{}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值