can not use this method for “getSqlFirst“

原代码:

@Override
public PageResult<AddressBookResDTO> pageList(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
    Long userId = UserContext.currentUserId();
    //使用工具类转为分页前的page
    Page<AddressBook> addressBookPage = PageUtils.parsePageQuery(addressBookPageQueryReqDTO, AddressBook.class);
    //IService的分页函数
    Page<AddressBook> page = page(addressBookPage,lambdaQuery().eq(AddressBook::getUserId, userId));
    return PageUtils.toPage(page,AddressBookResDTO.class);
}

这段代码看似很正常

但执行后会报异常

异常为:

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew != null and ew.sqlFirst != null'. Cause: org.apache.ibatis.ognl.OgnlException: sqlFirst [com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: can not use this method for "getSqlFirst"]

出错原因:

代码中直接使用了IService的lambdaQuery()的返回参数做page函数的第二个入参,虽说编译通过,但是在执行时且出现了问题

解决办法:

1)如果还要使用IService的lambdaQuery(),则需要加getWrapper()

@Override
public PageResult<AddressBookResDTO> pageList(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
    Long userId = UserContext.currentUserId();
    //使用工具类转为分页前的page
    Page<AddressBook> addressBookPage = PageUtils.parsePageQuery(addressBookPageQueryReqDTO, AddressBook.class);
    //IService的分页函数
    Page<AddressBook> page = page(addressBookPage,lambdaQuery().getWrapper().eq(AddressBook::getUserId, userId));
    return PageUtils.toPage(page,AddressBookResDTO.class);
}

2)使用原始的QueryWrapper

    @Override
    public PageResult<AddressBookResDTO> pageList(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
        Long userId = UserContext.currentUserId();
        //使用工具类转为分页前的page
        Page<AddressBook> addressBookPage = PageUtils.parsePageQuery(addressBookPageQueryReqDTO, AddressBook.class);
        //IService的分页函数
//        Page<AddressBook> page = page(addressBookPage,lambdaQuery().getWrapper().eq(AddressBook::getUserId, userId));
        Page<AddressBook> page = page(addressBookPage, new QueryWrapper<AddressBook>().eq("user_id", userId));
        return PageUtils.toPage(page,AddressBookResDTO.class);
    }

3)当然QueryWrapper要手动写属性,写错了就不好了,可以手动创建LambdaQueryWrapper

 @Override
    public PageResult<AddressBookResDTO> pageList(AddressBookPageQueryReqDTO addressBookPageQueryReqDTO) {
        Long userId = UserContext.currentUserId();
        //使用工具类转为分页前的page
        Page<AddressBook> addressBookPage = PageUtils.parsePageQuery(addressBookPageQueryReqDTO, AddressBook.class);
        //IService的分页函数
//        Page<AddressBook> page = page(addressBookPage,lambdaQuery().getWrapper().eq(AddressBook::getUserId, userId));
//        Page<AddressBook> page = page(addressBookPage, new QueryWrapper<AddressBook>().eq("user_id", userId));
        Page<AddressBook> page = page(addressBookPage, new LambdaQueryWrapper<AddressBook>().eq(AddressBook::getUserId,userId));
        return PageUtils.toPage(page,AddressBookResDTO.class);
    }

提示:

直接调用IService的lambdaQuery()虽说代码简洁,但是出现的问题要注意!

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值