Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named

Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named ‘xxxxx’

Mybatis Plus有很多情况报以上错误,这里总结一下遇到过的。

这里还有一个最可能出错的问题,即引用包的问题
一般默认引用ibatis的包,包引用混了,很容易出现下面的问题,并且两个包入参装配的方式完全是反的
import org.apache.ibatis.annotations.Param;
import io.lettuce.core.dynamic.annotation.Param;
  1. 入参对象中没有get set方法

    入参对象类中,对入参SET GET,或者使用lombok @Data注解即可解决

    public class ListBrowseStatisticInfoVO {
        @NotNull(message = "文章id不能为空")
        @ApiModelProperty(name = "textId", value = "文章id")
        private Integer textId;
    
        @NotEmpty(message = "发布链接地址不能为空")
        @ApiModelProperty(name = "actualUrl", value = "发布链接地址")
        private String actualUrl;
    
        @ApiModelProperty(name = "startDate", value = "开始时间 格式:yyyy-MM-dd")
        private String startDate;
    
        @ApiModelProperty(name = "endDate", value = "结束时间 格式:yyyy-MM-dd")
        private String endDate;
    }
    
  2. IPage分页查询,查询条件赋值时带有入参对象别名 [别名.name],Mapper映射没对应映射别名

    在Mapper中,使用@Param(“listRedPacketDrawVO”)映射入参对象别名即可解决

    /**
    *报错代码
    **/
    IPage<ListRedPacketDrawDO> listRedPacketDrawDetail(Page page, ListRedPacketDrawVO listRedPacketDrawVO);
    
    -- sql
    SELECT
        crerr.ms_uuid userId,
        crerr.receive_amount drawMoney,
        mc.name channel,
        mp.`name` platform,
        crerr.created_at  `desc`
    FROM cms_red_envelope_receive_record crerr
    LEFT JOIN ms_platform mp ON  mp.platform_id = crerr.platform
    LEFT JOIN ms_channel mc ON mc.channel_id = crerr.channel
    WHERE 1=1
    AND crerr.red_envelope_code = #{listRedPacketDrawVO.id}
    AND crerr.red_envelope_type = #{listRedPacketDrawVO.type}
    
    /**
    * 正确写法
    **/
    IPage<ListRedPacketDrawDO> listRedPacketDrawDetail(Page page, @Param("listRedPacketDrawVO")ListRedPacketDrawVO listRedPacketDrawVO);
    
  3. 不带分页的条件查询,在sql中写了对象别名

    去除sql中的对象别名即可解决

    /**
    * 错误代码
    **/
    List<ListBrowseStatisticsDO> listBrowseStatisticInfo(ListBrowseStatisticInfoVO listBrowseStatisticInfoVO);
    
    SELECT
    	browse_pv_num browseNum,
    	browse_uv_num visitorNum,
    	share_uv_num sharePersonNum,
    	share_pv_num shareNum,
    	biz_date businessDate
    FROM cms_text_analyse_day
    WHERE cms_text_id = #{listBrowseStatisticInfoVO.textId}
    AND actual_url = #{listBrowseStatisticInfoVO.actualUrl}
    
    -- 正确的传值
    WHERE cms_text_id = #{textId}
    AND actual_url = #{actualUrl}
    
  4. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘id’ not found. Available parameters are [listRedPacketDrawVO, page, param1, param2]
    sql中不带对象别名报错

     -- 错误写法
    IPage<ListRedPacketDrawDO> listRedPacketDrawDetail(Page page,  ListRedPacketDrawVO listRedPacketDrawVO);
    
    SELECT
       crerr.ms_uuid userId,
        crerr.receive_amount drawMoney,
        mc.name channel,
        mp.`name` platform,
        crerr.created_at  `desc`
    FROM cms_red_envelope_receive_record crerr
    LEFT JOIN ms_platform mp ON  mp.platform_id = crerr.platform
    LEFT JOIN ms_channel mc ON mc.channel_id = crerr.channel
    WHERE 1=1
    AND crerr.red_envelope_code = #{id}
    AND crerr.red_envelope_type = #{type}
    
    -- 正确写法 
    AND crerr.red_envelope_code = #{listRedPacketDrawVO.id}
    AND crerr.red_envelope_type = #{listRedPacketDrawVO.type}
    

          以上总结了几个常见的Mybatis plus传值问题,以上问题本地测试可能没问题,一上服务器就各种西西。
          总的说就是:分页查询在Mapper中要映射别名,xml中使用别名.name
                               普通的条件查询,Mapper中映射一波别名,xml中直接写条件,不用别名

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值