重写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));
}