| | |
| | | import cc.mrbird.febs.common.exception.FebsException; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.core.toolkit.support.SFunction; |
| | | |
| | | import java.util.ArrayList; |
| | |
| | | */ |
| | | public class ValidateEntityUtils { |
| | | |
| | | |
| | | /** |
| | | * 确保指定列的有效性,并返回相应的实体对象 |
| | | * 此方法用于验证数据库中某列的值是否存在,并返回包含该值的实体对象 |
| | | * 如果指定的值不存在或为null,将抛出异常 |
| | | * 此方法用于验证数据库中某列的值是否存在,并返回包含该值的实体对象 |
| | | * 如果指定的值不存在或为null,将抛出异常 |
| | | * |
| | | * @param valueToCheck 需要验证的值 |
| | | * @param columnExtractor 列值提取器,用于指定需要验证的列 |
| | | * @param queryWrapperExtractor 查询包装器提取器,用于执行数据库查询 |
| | | * @param errMsg 错误消息格式字符串 |
| | | * @param columnExtractors 可变参数(varargs)查询字段,可选,如果没有就是查询全部 |
| | | * @param <T> 实体类类型 |
| | | * @param <R> 列值类型 |
| | | * @param <V> 需要验证的值的类型 |
| | |
| | | V valueToCheck, |
| | | SFunction<T, R> columnExtractor, |
| | | SFunction<LambdaQueryWrapper<T>, T> queryWrapperExtractor, |
| | | String errMsg) { |
| | | // 检查需要验证的值是否为null |
| | | String errMsg, |
| | | SFunction<T, R>... columnExtractors) { |
| | | |
| | | // 检查输入参数是否为null |
| | | if (valueToCheck == null) { |
| | | throw new IllegalArgumentException("The value to check cannot be null while ensureColumnReturnEntity column"); |
| | | } |
| | | if (columnExtractor == null || queryWrapperExtractor == null) { |
| | | throw new IllegalArgumentException("Column extractor and query wrapper extractor cannot be null while ensureColumnReturnEntity column"); |
| | | } |
| | | |
| | | T entity = null; |
| | | try { |
| | | // 创建LambdaQueryWrapper并配置查询条件 |
| | | LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.select(columnExtractor) |
| | | .eq(columnExtractor, valueToCheck); |
| | | LambdaQueryWrapper<T> wrapper = Wrappers.lambdaQuery(); |
| | | if (columnExtractors != null && columnExtractors.length > 0) { |
| | | wrapper.select(columnExtractors); |
| | | } |
| | | wrapper.eq(columnExtractor, valueToCheck); |
| | | |
| | | // 执行查询并获取结果实体 |
| | | entity = queryWrapperExtractor.apply(wrapper); |
| | | |
| | | // 如果查询结果为空,则抛出异常 |
| | | if (entity == null) { |
| | | throw new FebsException(StrUtil.format(errMsg, valueToCheck)); |
| | | } |
| | | |
| | | // 提取查询结果中的列值 |
| | | R columnValue = columnExtractor.apply(entity); |
| | | // 如果列值为null,则抛出异常 |
| | | if (columnValue == null) { |
| | | throw new FebsException(StrUtil.format(errMsg, valueToCheck)); |
| | | } |
| | | |
| | | } catch (FebsException e) { |
| | | // 记录异常日志 |
| | | throw e; |
| | | } catch (Exception e) { |
| | | // 记录异常日志 |
| | | throw new FebsException(StrUtil.format("An error occurred while ensureColumnReturnEntity column: {}", valueToCheck)); |
| | | } |
| | | // 如果查询结果为空,则抛出异常 |
| | | if (entity == null) { |
| | | throw new FebsException(StrUtil.format(errMsg, valueToCheck)); |
| | | } |
| | | |
| | | // 提取查询结果中的列值 |
| | | R columnValue = columnExtractor.apply(entity); |
| | | // 如果列值为null,则抛出异常 |
| | | if (columnValue == null) { |
| | | throw new FebsException(StrUtil.format(errMsg, valueToCheck)); |
| | | throw new FebsException(StrUtil.format("An error occurred while ensuring column return entity: {}", valueToCheck)); |
| | | } |
| | | |
| | | // 返回查询到的实体类对象 |
| | |
| | | * @param columnExtractor 列值提取器,用于指定需要验证的列 |
| | | * @param queryWrapperExtractor 查询包装器提取器,用于执行数据库查询 |
| | | * @param errMsg 错误消息格式字符串 |
| | | * @param columnExtractors 可变参数(varargs)查询字段,可选,如果没有就是查询全部 |
| | | * @param <T> 实体类类型 |
| | | * @param <R> 列值类型 |
| | | * @param <V> 需要验证的值的类型 |
| | |
| | | V valueToCheck, |
| | | SFunction<T, R> columnExtractor, |
| | | SFunction<LambdaQueryWrapper<T>, List<T>> queryWrapperExtractor, |
| | | String errMsg) { |
| | | String errMsg, |
| | | SFunction<T, R>... columnExtractors) { |
| | | // 检查需要验证的值是否为null |
| | | if (valueToCheck == null) { |
| | | throw new IllegalArgumentException("The value to check cannot be null while ensureColumnReturnEntityList column"); |
| | |
| | | List<T> entities = new ArrayList<>(); |
| | | try { |
| | | // 创建LambdaQueryWrapper并配置查询条件 |
| | | LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<>(); |
| | | wrapper.select(columnExtractor) |
| | | .eq(columnExtractor, valueToCheck); |
| | | LambdaQueryWrapper<T> wrapper = Wrappers.lambdaQuery(); |
| | | if (columnExtractors != null && columnExtractors.length > 0) { |
| | | wrapper.select(columnExtractors); |
| | | } |
| | | wrapper.eq(columnExtractor, valueToCheck); |
| | | |
| | | // 执行查询并获取结果实体列表 |
| | | entities = queryWrapperExtractor.apply(wrapper); |