mybatis的#{}的误解
一般百度搜索#{}和${}的区别都是如以下一样千篇一律的答案(当然,也不是说错了):
这里仅针对第二点做一些说明:
#{}会对传递来的参数加上单引号是没错的,但是有个前提,得是字符串
比如传递的是一个String类型:
可以看到是有单引号的
integer类型:
到这里可能你会问,有什么关系吗?反正都可以查出来
一般来说,仅仅查询的话确实没问题,如果你传个数值类型的mysql会自动帮你类型转换
但是一旦你要走索引就要注意了,如果你的表字段类型为varchar类型的,而你又将参以数值的形式传进来的话,就不会使用该索引。
举个例子,register_time 是varchar类型
SELECT * FROM member_register
WHERE register_time >= 1634400000000
AND register_time <= 1636991999999
这样写的话,是走不上register_time这个索引的,会触发类型转换,因为后面1634400000000是int类型的,优先级比register_time (varchar)类型高
对于索引的一些问题
我之前一直以为只要对数据量大的表加索引就行了,小数据量的表我才不care
但是被啪啪啪打脸了。。。
至于为什么?俺也不知道,先学着吧!