重写mybatisplusremoveById

时间:2025-03-20 13:46:48

重写mybatis plus removeById()

 想要根据id删除一个东西,但是如果传来的id不存在就返回错误,体验不好,随便传入id也把这个id当存在返回成功删除。
/**
     * 根据 ID 删除
     * 
     * @param id 主键ID
     */
    default boolean removeById(Serializable id) {
        return SqlHelper.retBool(getBaseMapper().deleteById(id));
    }

可以看到mybatisplus的removeById()是根据数据库中已有id删除的结果作为参数。进入retBool()方法

 /**
     * 判断数据库操作是否成功
     *
     * @param result 数据库操作返回影响条数
     * @return boolean
     */
    public static boolean retBool(Integer result) {
        return null != result && result >= 1;
    }

如果id不存在,返回值是一个false删除不了。所以 重写mybatis plus的逻辑删除方法

/**
 * 用户传入不存在id也当做已经删除了
 *
 * @param id 用户id
 * @return boolean
 */
@Override
public boolean  removeById(Serializable id) {
    if(!exists((String) id)){
        return true;
    }
    return super.removeById(id);
}

/**
 *  id是否存在
 *
 * @param id 用户id
 * @return boolean
 */
public boolean exists(String id){
    return Objects.nonNull(id);
}

重写用到了Objects工具类的nonNull(Object obj)方法,如果不为null返回true

同样如果想要级联删除一个类别下的所有东西,但如果这个类别下是一个空的,就删除这个类别,这个可以重写removeByIds(),只需要改一下 if语句块的返回值奥!

  default boolean removeByIds(Collection<? extends Serializable> idList) {
        if (CollectionUtils.isEmpty(idList)) {
            return false;
        }
        return SqlHelper.retBool(getBaseMapper().deleteBatchIds(idList));
    }