经过一番找资料和排查,最终确定了是#{}和${}的使用区别;
下面讲一下报错的原因。我们都知道#{}用的是预编译的方法,因此自动转换成相应的类型,当类型为char类型的时候,就会自带引号,因此,当使用like的时候条件就变成了:
'%#{xxx}%' //这是mybatis的内容
'%'xxx'%'; //这个是转换过后的内容
为此,特地的去尝试了以下${}
是不是不带引号的,因此测试了以下sql语句,当我直接将${}
赋值给char类型的时候,便会报错,而当我在’${}'
这样表示的时候便会成功运行,一下为测试语句:
select * from goods where id=#{arg0} and name = ${param2} //这样是会失败的
select * from goods where id=#{arg0} and name = '${param2}' //这样才会执行成功