top.jiaojinxin.jln.mp.bo.IBaseBO Maven / Gradle / Ivy
The newest version!
package top.jiaojinxin.jln.mp.bo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.util.CollectionUtils;
import top.jiaojinxin.jln.model.query.PageQuery;
import top.jiaojinxin.jln.mp.model.BaseEntity;
import top.jiaojinxin.jln.model.query.ConditionItem;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
/**
* 单表业务操作接口基类
* 继承自{@link IService}
* 可扩展基础的单表业务操作
*
* @param 实体类型
* @author JiaoJinxin
*/
public interface IBaseBO extends IService {
/**
* 校验是否存在(根据指定属性校验是否不存在)
*
* @param property 属性
* @param propertyValue 属性值
* @param 属性类型
* @return boolean
* @author JiaoJinxin
*/
default boolean notExistsBy(SFunction property, R propertyValue) {
return !existsBy(property, propertyValue);
}
/**
* 校验是否存在(根据指定属性校验是否存在)
*
* @param property 属性
* @param propertyValue 属性值
* @param 属性类型
* @return boolean
* @author JiaoJinxin
*/
default boolean existsBy(SFunction property, R propertyValue) {
return existsBy(Map.of(property, propertyValue));
}
/**
* 校验是否存在(根据指定属性校验是否不存在)
*
* @param propertyMap 属性与属性值的Map集合
* @param 属性类型
* @return boolean
* @author JiaoJinxin
*/
default boolean notExistsBy(Map, R> propertyMap) {
return !existsBy(propertyMap);
}
/**
* 校验是否存在(根据指定属性校验是否存在)
*
* @param propertyMap 属性与属性值的Map集合
* @param 属性类型
* @return boolean
* @author JiaoJinxin
*/
boolean existsBy(Map, R> propertyMap);
/**
* 删除(根据指定属性获取符合条件的所有对象)
*
* @param property 属性
* @param propertyValue 属性值
* @param 属性类型
* @return boolean
* @author JiaoJinxin
*/
default boolean removeBy(SFunction property, R propertyValue) {
List ids = listBy(property, propertyValue).stream().map(BaseEntity::getId).toList();
if (CollectionUtils.isEmpty(ids)) {
return false;
}
return removeByIds(ids);
}
/**
* 单个查询(根据指定属性获取符合条件的任意一个对象)
*
* @param property 属性
* @param propertyValue 属性值
* @param 属性类型
* @return E
* @author JiaoJinxin
*/
default E getBy(SFunction property, R propertyValue) {
return getBy(property, propertyValue, Function.identity());
}
/**
* 单个查询(根据指定属性获取符合条件的任意一个对象)
*
* @param property 属性
* @param propertyValue 属性值
* @param convertor 结果转换器
* @param 属性类型
* @param 转换后的最终结果
* @return E
* @author JiaoJinxin
*/
default F getBy(SFunction property, R propertyValue, Function convertor) {
return listBy(property, propertyValue, convertor).stream().findAny().orElse(null);
}
/**
* 列表查询(根据主键ID)
*
* @param ids 主键ID集合
* @param convertor 结果转换器
* @param 转换后的最终结果
* @return java.util.Collection
* @author JiaoJinxin
*/
Collection listByIds(Collection ids, Function convertor);
/**
* 列表查询(根据指定属性获取符合条件的所有对象)
*
* @param property 属性
* @param propertyValue 属性值
* @param 属性类型
* @return java.util.Collection
* @author JiaoJinxin
*/
default Collection listBy(SFunction property, R propertyValue) {
return listBy(property, propertyValue, Function.identity());
}
/**
* 列表查询(根据指定属性获取符合条件的所有对象)
*
* @param property 属性
* @param propertyValue 属性值
* @param convertor 结果转换器
* @param 属性类型
* @param 转换后的最终结果
* @return E
* @author JiaoJinxin
*/
Collection listBy(SFunction property, R propertyValue, Function convertor);
/**
* 分页查询
*
* @param pageQuery 分页查询数据传输对象
* @param conditionItemConvert 转换器:将分页查询条件转换为Map(key为column,value为{@link ConditionItem})
* @param 分页查询条件数据传输对象
* @return com.baomidou.mybatisplus.core.metadata.IPage
* @author JiaoJinxin
*/
IPage page(PageQuery pageQuery, Function, ConditionItem>>> conditionItemConvert);
/**
* 分页查询
*
* @param pageQuery 分页查询数据传输对象
* @param entityConvert 转换器:将分页查询结果{@link E}转换为{@link F}
* @param conditionItemConvert 转换器:将分页查询条件转换为Map(key为column,value为{@link ConditionItem})
* @param 分页查询条件数据传输对象
* @param 分页查询实际返回结果
* @return com.baomidou.mybatisplus.core.metadata.IPage
* @author JiaoJinxin
*/
default IPage page(PageQuery pageQuery, Function entityConvert,
Function, ConditionItem>>> conditionItemConvert) {
return page(pageQuery, conditionItemConvert).convert(entityConvert);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy