连初级都算不上的代码小白 2024-03-21 20:22 采纳率: 52.4%
浏览 12

mybatisPlus的querywrapper


LambdaQueryWrapper<Follow>lambdaQueryWrapper=new LambdaQueryWrapper<>();
        lambdaQueryWrapper.eq(Follow::getUserId,userId).eq(Follow::getFollowUserId,id);
        remove(lambdaQueryWrapper);
QueryWrapper<Follow> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("user_id", userId)
                .eq("follow_user_id", id);
        remove(queryWrapper);

这两种有什么区别吗?为什么上面的报错
报错如下

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.sqlSegment != null and ew.sqlSegment != '' and ew.nonEmptyOfWhere'. Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment [java.lang.ExceptionInInitializerError]

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-03-21 20:22
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题分析: 这个问题中给出了两段代码,它们都是在执行相同的逻辑:通过构造查询条件实现删除操作。其中一个使用了QueryWrapper,另一个使用了LambdaQueryWrapper。 QueryWrapper和LambdaQueryWrapper的主要区别是,LambdaQueryWrapper支持在构造查询条件时使用Lambda表达式。使用Lambda表达式可以更加简洁明了地表达查询条件,并且避免了手写字符串,减少了拼写错误的风险。 代码分析: 第一段代码使用了LambdaQueryWrapper:
    LambdaQueryWrapper<Follow> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.eq(Follow::getUserId, userId)
                     .eq(Follow::getFollowUserId, id);
    remove(lambdaQueryWrapper);
    

    这段代码构造了一个LambdaQueryWrapper对象,然后设置了两个查询条件,分别是:userId和id。最后调用了remove方法,实现了删除操作。 第二段代码使用了QueryWrapper:

    QueryWrapper<Follow> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("user_id", userId)
                .eq("follow_user_id", id);
    remove(queryWrapper);
    

    这段代码构造了一个QueryWrapper对象,然后设置了两个查询条件,分别是:userId和id。最后调用了remove方法,实现了删除操作。 问题原因: 根据报错信息和代码分析,可以看出第一段代码中的错误来自于remove方法的调用。remove方法接收的参数应该是一个Wrapper对象,但是LambdaQueryWrapper继承自AbstractWrapper,而AbstractWrapper并没有实现Wrapper接口。因此,在此情况下,需要将LambdaQueryWrapper转换成Wrapper对象,才能传递给remove方法。 解决方法: 将LambdaQueryWrapper转换成Wrapper对象,需要使用LambdaQueryWrapper的as方法。将第一段代码修改如下:

    LambdaQueryWrapper<Follow> lambdaQueryWrapper = new LambdaQueryWrapper<>();
    lambdaQueryWrapper.eq(Follow::getUserId, userId)
                     .eq(Follow::getFollowUserId, id);
    remove(lambdaQueryWrapper.asQuery());
    

    在LambdaQueryWrapper对象上调用asQuery方法,就可以得到一个QueryWrapper对象,可以将其作为参数传递给remove方法。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月21日