mybatis-plus查询已经逻辑删除的数据

业务场景:有些情况的时候,我们查询某个地方引用的数据被“软删除”了,mybatis-plus直接的api无法帮我查询出来,但是我又不想手写sql,只想使用 条件构造器。

场景:假如我们的mysql表逻辑删除字段是 is_delete,直接使用myabtis-plus的api他会自动帮我们拼上 is_delete=0, 这是写死的固定查询条件,当我们使用条件构造器的时候,它都会去带上这个固定条件,导致我们想要查询被“软删除的”数据,只能通过手写sql的方式。

其实,条件构造器也是可以查询出来的,来看我的骚操作(不推荐),还是尽量用xml吧。

这里写目录标题

  • 一、问题描述
  • 二、解决方法
    • 2.1 方法一:通过条件构造器(小聪明,不推荐)
      • 2.1.1 写法一运行sql截图
      • 2.1.2写法二运行sql截图
    • 2.2 方法二:通过xml(推荐)
  • 三、注意!

一、问题描述

什么都不写的时候,直接使用mybatis-plu的条件构造器queryWrapper的话会自动拼上逻辑删除的字段,如图:
mybatis-plus查询已经逻辑删除的数据_第1张图片
这样的话大部分情况是满足我的需求的(不然我也不会使用逻辑删除@TableLogic了),但是,我有些情况下,我就是需要把逻辑删除的数据也查询出来,下面有几种解决办法。

二、解决方法

2.1 方法一:通过条件构造器(小聪明,不推荐)

(此写法有风险,需要注意mybaits-plus-starter的版本)

测试版本:3.1.0 可用此写法
测试版本:3.3.1 不能使用该写法


    @Override
    public TyqUser getUserById(String id) {
        LambdaQueryWrapper<TyqUser> queryWrapper = Wrappers.<TyqUser>lambdaQuery();
        // 写法1:
//        queryWrapper.eq(TyqUser::getId, id);
//        queryWrapper.or().eq(TyqUser::getId, id);
        // 写法2:
//        queryWrapper.apply("id = {0} or deleted = 1 and id = {0}", id);
        // 写法3:使用@Select("select * from user where id = #{}"),等同于写法4
        // 写法4:使用 xml ,将上方语句写到