只讲重点:
在进行编写mybatis数据库查询语句代码的时候,dao层参数如果是多个的会加上@Param注解给参数别名。如果参数是单个的话就不需要加注解了(一直以来都是这样写的,并且也没什么问题)。
然而今天测试代码,本地这么写一点毛病没有,但是发布到线上就出问题了,报错:
nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'quotaId' in 'class java.lang.String'
如果dao层参数是String类型,并且不想使用@Param注解的话,有两种情况会报错:
1.sql语句使用if进行参数值判
<if test="xxx!= null">
where id != #{xxx}
</if>
2.sql语句出现参数格式 '${xxx}' 或者 '#{xxx}' 的时候
where id like concat('%','${xxx}','%')
where id like concat('%','#{xxx}','%')
注意:如果sql这样写是不会报错的:
where id = #{xxx}
where id like concat('%',#{xxx},'%')
解决办法:
1.给dao层参数加上@Param注解
(@Param("xxx") String xxx)
2.使用mybatis默认参数名 _parameter或value
where id like #{_parameter}
where id like concat('%','${value}','%')