Mybatis 中 ${ } 与 #{ } 的区别

一、问题出现场景
  1. 在使用 Mybatis ,设置映射文件中 SQL 语句的时候,对于传入参数的接收方式有不同的方式:${ } 与 # { }
  2. 在进行 SQL 拼接的时候,发现对于传递进来的同一个对象,当查询使用的 SQL 语句不同时候,对这两者的选择也不同
二、问题思考
  1. 首先,两者都是接收参数的选择
  2. 那么顺理成章的就想到,两者应该会有各自适合的情景,也可能两者是新旧方法
  3. 因此考虑队两者进行一些总结,包括两者的共同点,以及各自的应用场景,使用频率,各自优缺点等
三、两者比较
1. 相同点
  1. 两者都是对于映射文件中 SQL 传入参数接收的选择
  2. 二者都能够接收到传递过来的数据
2.差异
  1. 以简单的一个 sql 语句为例: select * from user where uid=? (假设传递过来的参数就 id 值为 1)
  2. 对于 #{ }:
    1. sql 写法 :select * from user where uid= #{ id }
    2. 实际 sql :select * from user where uid= ’ 1 ’
  3. 对于 ${ }:
    1. sql 写法:select * from user where uid= ${ id }
    2. 实际 sql:select * from user where uid= 1
  4. 可以明显看到,最直接的差异在于使用 #{ } 时候,会对参数加单引号的处理,而 ${ } 则是直接进行拼接
3.各自特点
  1. 使用 #{ } 方式可以很大程度上防止sql注入
  2. 但是如果 sql 语句为查询某个表,例如 order by,又例如必须模糊查询中 ,本身就已经带了 ’ ',此时再带引号会引起报错等情况下,应该选择使用 ${ }
4. 总结
  1. 通常情况下,应该尽量选择使用 #{ } ,以避免可能出现的 sql 注入的情况发生
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值