排查一上午,xml 、 @select 、QueryWrapper 都试了 查询语句结构也换了几次均无法使用
原先语句
@Select(" SELECT * FROM t_document_prepar_revision WHERE
create_user_id = #{username}
OR (issuing_department IN (#{msg}) AND state = '1')")
改后
@Select(" SELECT * FROM t_document_prepar_revision WHERE
create_user_id = ${username}
OR (issuing_department IN (${msg}) AND state = '1')")
#{}和${}都可以在MyBatis中用来动态地接收参数,但是是有区别的
处理参数方式不同
预编译处理
#{} :MyBatis在处理#{}时,会将SQL语句中的#{}替换为?,即占位符,然后使用PreparedStatement的set方法来赋值。
直接替换
${} :MyBatis在处理${}时,会直接将SQL语句中的${}替换为参数的值。
注:接收int类型的参数时是不会报错的,但是用来接收String类型的参数时代码就会报错
需要在String 参数上加 ' xx '所以问题就出现了
变量替换后,#{} 对应的变量对于String类型会自动加上单引号 ‘’
msg : 'a','b','c','d'
替换后变成 ''a','b','c','d'' in 就查不到想要得了
而 ¥{} 直接替换
in ('a','b','c','d') 就能查到