MyBatisPlus中怎么取消注入逻辑删除的SQL?

如果MyBatisPlus配置了逻辑删除的话,所有查询语句都会默认加上一句WHERE del_flag=0这样的SQL。

想问一下如何取消添加这一句话。比如一个配置了逻辑删除的实体类User,可能在某个业务查询的时候希望查出所有不管是否被删除的数据,这个时候怎么应该怎么配置QueryWrapper?

阅读 5.2k
2 个回答

既然它默认是加上了WHERE del_flag=0那你就拼接一个AND条件del_flag=1就能实现拿到所有数据了吧

你可以参考一下,下面的处理方法:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public List<User> getAllUsers() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        User user = new User();
        user.setDelFlag(null); // 取消逻辑删除过滤
        queryWrapper.setEntity(user);

        return userMapper.selectList(queryWrapper);
    }
}

自定义的 SqlSegment,以下是一种方法:

你再试试先自定义一个 SqlSegment 类,继承 AbstractWrapper 类:


import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.baomidou.mybatisplus.core.conditions.segments.MergeSegments;

public class CustomWrapper<T> extends AbstractWrapper<T, String, CustomWrapper<T>> {

    public CustomWrapper(T entity, MergeSegments mergeSegments) {
        super(entity, mergeSegments);
    }

    @Override
    protected String columnToString(String column) {
        return column;
    }

    @Override
    protected String getKey(String column, Object val) {
        return column;
    }
}

然后,在UserService 中使用自定义的 CustomWrapper:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public List<User> getAllUsers() {
        CustomWrapper<User> customWrapper = new CustomWrapper<>(null, null);
        customWrapper.eq("id", 1); // 添加查询条件,例如:WHERE id = 1

        return userMapper.selectList(customWrapper);
    }
}

这样应该就好了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题