我们在使用 MybatisPlus 的过程中, in 查询是用得最多的操作之一,但是在日常开发中,往往很容易忽视 in 查询时,传入的集合不得为空,包括空集合,因此,在代码中很容易写成下面这样:
错误写法
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
public List<User> getUsersByIds(List<Long> ids) {
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(User::getId, ids); // 使用 in 查询
return this.list(queryWrapper);
}
}
在日常业务中,用于查询的 id 集合为空是很常见的,因此,很容易就会导致报错。
正确写法
我们应该养成习惯先对 ids 进行判空,若为空,及时剪枝,防止抛异常以及减少性能开销。
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
@Service
public class UserService extends ServiceImpl<UserMapper, User> {
public List<User> getUsersByIds(List<Long> ids) {
if (ids == null || ids.isEmpty()) {
return Collections.emptyList(); // 返回空列表
}
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.in(User::getId, ids); // 使用 in 查询
return this.list(queryWrapper);
}
}
只要在开发中养成这样的习惯,就能减少很多低级的 bug,否则,到了上线才发现,还得 fix 和重新发布,对工作效率会有很大的影响!