mybatis的l动态sql语句xml文件中,若调用方法传入的不是实体对象类型,而是基本类型如字符串参数,在使用if标签时报错:

There is no getter for property named ‘CID’ in ‘class java.lang.String’

Mybati的if标签报错:There is no getter for property named


xml文件内容如下

<select id="getUserByID2" parameterType="string" resultMap="mapUser2">
select u.*,a.* from feeCDataUser u,FeeArea a
where u.AreaID=a.AreaID
<if test="CID !=null">
and CID = #{CID}
</if>
</select>

原因分析:此提示CID没有提取方法,说明系统把参数当成对象来提取。
解决方案:传入参数如果不是实体对象类型,需使用“_parameter”来替代参数值。修改后xml如下:

<select id="getUserByID2" parameterType="string" resultMap="mapUser2">
select u.*,a.* from feeCDataUser u,FeeArea a
where u.AreaID=a.AreaID
<if test="_parameter !=null">
and CID = #{_parameter}
</if>
</select>

结果:运行正常。

如果入参是两个的时候,就要使用mybatis的注解“@Param”。在定义方法的时候使用方式如下:

public User getUserByID2(@Param("CID") String CID,@Param("AreaID") String AreaID);

此时,xml里面已经不需要parameterType属性设置了。xml内容改为:

<select id="getUserByID2"  resultMap="mapUser2">
select u.*,a.* from feeCDataUser u,FeeArea a
where u.AreaID=a.AreaID
<if test="CID !=null">
and CID = #{CID}
</if>
<if test="AreaID !=null">
and u.AreaID = #{AreaID}
</if>
</select>

完毕。