MyBatis查询无命中数据时会返回什么结果?
MyBatis查询无命中数据时的返回值规则
- 返回
List、Set、Collection系列集合类型时,查询无命中永远不会返回null,MyBatis会在底层完成空集合初始化,返回长度为0的对应集合实例,开发时不需要额外对集合结果做null判断,直接遍历、调用流式API都不会触发空指针。 - 返回单个自定义POJO、包装类(
Integer/Long/String等)、单条结果接收的Map类型时,查询无命中会直接返回null,这类场景必须做非空校验,否则直接调用对象方法会抛出空指针异常。 - 返回值为Java基本数据类型(
int/long/boolean等,非包装类)时,查询无命中会直接抛出运行时异常——因为基本类型无法接收null值,实际业务开发中尽量不要用基本类型作为查询方法的返回值,避免无数据场景报错。
常见误区:不需要为集合类型的返回值额外写判空兜底逻辑,MyBatis本身已经处理了无数据时的集合初始化,冗余判空反而会增加不必要的代码量。
实际Mapper接口写法参考:
public interface UserMapper { // 无命中返回空ArrayList,不会为null List<User> selectByCondition(UserQuery query); // 无命中返回null User selectByPrimaryKey(Long id); // 错误写法:无命中时会抛异常 int selectValidUserCount(); // 正确写法:无命中返回null,可手动处理为0 Integer selectValidUserCountCorrect(); }
内容的提问来源于stack exchange,提问作者Michael Hsu
相关产品推荐
相关产品推荐

