已解决nested exception is org.apache.ibatis.reflection.ReflectionException
文章目录
- 报错问题
- 解决方法
- 声明
报错问题
粉丝群里面的一个小伙伴敲代码时发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴),报错信息如下:
nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘name’ in ‘class java.lang.String’
解决方法
解决方法如下
MyBatis在进行参数判断的时候,直接可以用 就可以了,如下:
<update id="update" parametertype="java.lang.string">
update test
<set>
<if test="name != null">
id = #{Id,jdbcType=TINYINT},
</if>
<if test="langId != null">
lang_id = #{langId,jdbcType=INTEGER},
</if>
</set>
where id = #{Id,jdbcType=INTEGER}
</update>
但是单个参数和多个参数之间有一个不同,那就是当我们的入参为entity实体,或者map的时候,使用if 参数判断没任何问题。但是当我们的入参为java.lang.Integer 或者 java.lang.String的时候,这时候就需要注意以下问题了
<select id="LangId" parameterType="java.lang.Integer" resultType="java.lang.Integer">
select
trnsct_id
from t_trnsct_way_l where
<if test="Id != null" >
and id = #{Id}
</if>
</select>
上述代码存在一些问题,首先入参是java.lang.Integer, 而不是map或者实体的入参方式,对于这类单个入参然后用if判断的,mybatis有自己的内置对象,那么本来Mybatis有着自己的getter setter方法,这里又指定了传入类型,所以在指定类型里面获取不到gettet方法也就可以理解了。
<select id="LangId" parameterType="java.lang.Integer" resultType="java.lang.Integer">
select
trnsct_id
from t_trnsct_way_l where
<if test="parameter != null" >
and id = #{Id,jdbcType=INTEGER}
</if>
</select>
声明
解决方法参考网络,如有侵权联系我删除