数据如下(注意age是int类型):
sql如下(注意是#不是$):
java代码:
Mybatis日志(只返回一笔记录):
直接在mysql中执行(age是int类型,注意参数带引号,确认jdbc是执行的这个sql):
在不带引号的情况下,正常返回:
所以问题出在:
Int类型字段,in条件查询时,传入了String类型的参数,而#处理方式是字段判断参数类型,
如果是String 会在参数两边加""双引号。
解决方式:
1、xml 使用forEach
2、使用$代替#
3、使用FIND_IN_SET函数,如:
当然还有一个遗憾就是,为啥Mysql in操作,int类型匹配String时,要取第一个字段?
我觉得要么就直接报错,或者不返回记录,这样返回一条反而容易引起误解。
有哪位大牛知道in的底层实现逻辑吗?
TODO: 后续深入研究下in底层实现。