已解决nested exception is org.apache.ibatis.reflection.ReflectionException

完美解决nested exception is org.apache.ibatis.reflection.ReflectionException_apache


文章目录

  • 报错问题
  • 解决方法
  • 声明


报错问题

粉丝群里面的一个小伙伴敲代码时发生了报错(当时他心里瞬间凉了一大截,跑来找我求助,然后顺利帮助他解决了,顺便记录一下希望可以帮助到更多遇到这个bug不会解决的小伙伴),报错信息如下:

nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘name’ in ‘class java.lang.String’

完美解决nested exception is org.apache.ibatis.reflection.ReflectionException_mybatis_02

解决方法

解决方法如下

完美解决nested exception is org.apache.ibatis.reflection.ReflectionException_java_03


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>

声明

解决方法参考网络,如有侵权联系我删除