mybatis在xml的if条件判断中出现There is no getter for property named 'parentMenuid' in 'class java.lang.Integer' 这样的错误,小编的错误代码如下:
mapper接口部分:
List<Category> selectAllCategory(Integer parentMenuid);
mybatis xml配置文件是这样写的:
<select id="selectAllCategory" parameterType="java.lang.Integer" resultMap="ResultMapWithBLOBs"> <choose> <when test="parentMenuid != null"> select * from category where parent_menuid = #{parentMenuid,jdbcType=INTEGER} </when> <otherwise> select * from category </otherwise> </choose> </select>
它在判断“parentMenuid != null”这里出现了上述的错误,如果你mapper接口传入的是String字符串参数,就会报There is no getter for property named 'parentMenuid' in 'class java.lang.String' 这样的错误,但错误原因都是一样的,都是因为无法映射parentMenuid这个key。
错误解决方案有三种:
方案一:将mapper接口参数前面添加@Param注解区分,让它知道这个key,适合于多参数的时候出现上述的错误,代码如下:
List<Category> selectAllCategory(@Param("parentMenuid") Integer parentMenuid);
方案二:将mapper中的parentMenuid参数放到param这个Map对象中,以Map对象的形式传入,例如要传入的参数是“88888”:
param.put("parentMenuid","88888");
List<Category> selectAllCategory(Map<String,Object> param);
然后将mybatis xml部分的parameterType改成如下这样即可,其它地方不变:
parameterType="java.util.Map"
方案三:如果只传入一个参数,则可以将“parentMenuid != null”判断部分用_parameter来代替参数名,其它地方不变,代码如下:
<select id="selectAllCategory" parameterType="java.lang.Integer" resultMap="ResultMapWithBLOBs"> <choose> <when test="_parameter != null"> select * from category where parent_menuid = #{parentMenuid,jdbcType=INTEGER} </when> <otherwise> select * from category </otherwise> </choose> </select>
完毕!