接口 2.2 io.mybatis.mapper.base.EntityMapper<T, I>

实体类最基础的通用方法:

  • int insert(T entity): 保存实体
  • int insertSelective(T entity): 保存实体中不为空的字段
  • int deleteByPrimaryKey(I id): 根据主键删除
  • int delete(T entity): 保存实体信息批量删除
  • int updateByPrimaryKey(T entity): 根据主键更新实体
  • int updateByPrimaryKeySelective(T entity): 根据主键更新实体中不为空的字段
  • Optional<T> selectByPrimaryKey(I id): 根据主键查询实体
  • Optional<T> selectOne(T entity): 根据实体字段条件查询唯一的实体
  • List<T> selectList(T entity): 根据实体字段条件批量查询
  • int selectCount(T entity): 根据实体字段条件查询总数

这个接口中返回值特殊的有两个 Optional<T>,使用的 Java8 中的 Optional 类型,表明接口返回值可能为空, 使用时应该判断或使用 Optional 提供的 orXX 方法,比如下面几种情况:

  1. 返回值不能为空,为空则抛出异常:
    Optional<User> userOptional = entityMapper.selectByPrimaryKey(user.getId());
    return userOptional.orElseThrow(() -> new RuntimeException("数据不存在"));
    
  2. 如果不存在,新建一个:
    Optional<User> userOptional = entityMapper.selectByPrimaryKey(user.getId());
    return userOptional.orElseGet(User::new)
    
  3. 如果不存在,直接返回 null:
    Optional<User> userOptional = entityMapper.selectByPrimaryKey(user.getId());
    return userOptional.orElse(null);
    

真正使用 Optional 的时候,要尽可能避免以前 obj != null 这种判断思维,避免使用 Optional.isPresent() 判断,才能真正掌握 Optional 的用法。

如果你不喜欢上面返回值为 Optional,就想返回 T,可以参考 2.1.5 通过修改接口方法的返回值和入参,就能变身无数个通用方法 中介绍实现方式。