MybatisPlus如何用wrapper语句灵活连接多查询条件

发布于:2025-08-02 ⋅ 阅读:(15) ⋅ 点赞:(0)

目录

第一步:了解查询语句规则

第二步:了解wrapper语句规则

​编辑我们如何解决这个问题:(手动加括号!)


第一步:了解查询语句规则

第二步:了解wrapper语句规则

对于wrapper语句来说

likeright = "内容%"

like = "%内容%"

likeleft = "%内容"

eq就是等于,属于精准查询

如果不加wrapper.or()那么默认用and连接

结果就会是这样,上述我们也说过了,And的优先级大于or


我们如何解决这个问题:(手动加括号!)
 

wrapper.and就相当于加小括号

 wrapper.and(wq -> {
            wq.likeRight(ContentEntity::getContentTags, contentTags + split)
                .or()
                .like(ContentEntity::getContentTags, split + contentTags + split)
                .or()
                .likeLeft(ContentEntity::getContentTags, split + contentTags)
                .or()
                .eq(ContentEntity::getContentTags, contentTags);
        
        });
        wrapper.eq(ContentEntity::getContentPublishStatus, 1)
                .eq(ContentEntity::getDel, 0)
                .orderByDesc(ContentEntity::getContentSort);

那么生成的条件语句通过

System.out.println(wrapper.getCustomSqlSegment());

打印结果如下 :

WHERE (
    -- 标签匹配条件
    (
        content_tags LIKE #{ew.paramNameValuePairs.MPGENVAL1} OR
        content_tags LIKE #{ew.paramNameValuePairs.MPGENVAL2} OR
        content_tags LIKE #{ew.paramNameValuePairs.MPGENVAL3} OR
        content_tags = #{ew.paramNameValuePairs.MPGENVAL4}
    )
    
    -- 状态筛选条件
    AND content_publish_status = #{ew.paramNameValuePairs.MPGENVAL5}
    AND del = #{ew.paramNameValuePairs.MPGENVAL6}
)
ORDER BY content_sort DESC