有以下几种原因:
1. mysql 表里面字段 命名上导致的
name =#{nn}
name 是特殊字段,需要改成`name`=#{nn}
2.
在Mybatis中Mapper.xml文件中,如果有sql涉及的模糊查询,中间包含like语句时,只能使用$,不能使用#。
但是使用$时,相当于直接传递字符串,存在sql注入的风险
而使用#{}语法将导致MyBatis生成PreparedStatement属性,并根据PreparedStatement参数安全地设置值(例如?)。虽然这更安全,更快速,几乎总是首选
like concat('%',#{nn},'%') 来解决
${name} 是不带单引号的,而#{name} 是带单引号的
所以,当你用到 like '%#{name}%' 会报这种错误
3. ? 占位符 与设置的值 没有对应上 个数不一致