Mybati的if标签报错:There is no getter for property named ‘CID‘ in ‘class java.lang.String‘

tech2026-06-17  2

本文转载自以下文章 Mybati的if标签报错:There is no getter for property named ‘CID’ in ‘class java.lang.String’

https://blog.csdn.net/quan278905570/article/details/95948614

----正文开始----

mybatis的l动态sql语句xml文件中,若调用方法传入的不是实体对象类型,而是基本类型如字符串参数,在使用if标签时报错: There is no getter for property named ‘CID’ in ‘class java.lang.String’ 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>
最新回复(0)