Mybatis中 $ 和 # 的区别

在使用mybatis的时候出现了一个问题,同样的sql语句居然在mybatis中查出来的和在mysql控制台查出来的居然是两个东西,原因是什么呢?

造成问题的原因是mybatis中的# 和 $没用弄懂究竟是怎么使用

首先来看看两边的sql语句(一个查询列的sql,列名是自定义的)

mysql:

select ? from score 

mybatis的sql映射文件

select #{subject} from score 

#就是问题的根源,我们都知道mybatis中有两种占位符方式,一种#{},一种${},他们都可以获取变量,区别就在于#{}可以做到预编译,会有数据类型的检验和安全检验

  • 数据类型的检验:会自动识别传入的内容是否为字符串类型,如果是会加上' '

  • 安全检验:若变量带有引号,则会对引号进行转义处理,做到了防止sql注入

$就是用来进行内容的交换,一般用于拼接字符串

所以上面的bug也就解开了,看似是两个相同的sql,但实际写出来是

select math from score 
select 'math' from score 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值