在使用mybatis的时候出现了一个问题,同样的sql语句居然在mybatis中查出来的和在mysql控制台查出来的居然是两个东西,原因是什么呢?
造成问题的原因是mybatis中的# 和 $没用弄懂究竟是怎么使用
首先来看看两边的sql语句(一个查询列的sql,列名是自定义的)
mysql:
select ? from score
mybatis的sql映射文件
select ${subject} from score
select #{subject} from score
#就是问题的根源,我们都知道mybatis中有两种占位符方式,一种#{},一种${},他们都可以获取变量,区别就在于
#{}可以做到预编译,会有数据类型的检验和安全检验
数据类型的检验:会自动识别传入的内容是否为字符串类型,如果是会加上' '
安全检验:若变量带有引号,则会对引号进行转义处理,做到了防止sql注入
${}就是用来进行内容的交换,一般用于拼接字符串
所以上面的bug也就解开了,看似是两个相同的sql,但实际写出来是
select math from score
select 'math' from score