如果MyBatisPlus配置了逻辑删除的话,所有查询语句都会默认加上一句WHERE del_flag=0
这样的SQL。
想问一下如何取消添加这一句话。比如一个配置了逻辑删除的实体类User,可能在某个业务查询的时候希望查出所有不管是否被删除的数据,这个时候怎么应该怎么配置QueryWrapper?
如果MyBatisPlus配置了逻辑删除的话,所有查询语句都会默认加上一句WHERE del_flag=0
这样的SQL。
想问一下如何取消添加这一句话。比如一个配置了逻辑删除的实体类User,可能在某个业务查询的时候希望查出所有不管是否被删除的数据,这个时候怎么应该怎么配置QueryWrapper?
你可以参考一下,下面的处理方法:
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);
}
}
这样应该就好了
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
既然它默认是加上了WHERE del_flag=0那你就拼接一个AND条件del_flag=1就能实现拿到所有数据了吧