注意使用 MybatisPlus 易踩的坑

400 阅读1分钟

我们在使用 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 和重新发布,对工作效率会有很大的影响!