由于本人喜欢用LambdaQueryWrapper 不喜欢用 QueryWrapper 的前提下,每张表都有一个delete_status和status状态,写查询接口的时候都是 CV编程不太舒服。因此想到构造一个统一的方法去把这俩值塞入。
采用 apply() 根据文档来,如图。
工具方法,采用泛型方法,实现每次可以获取到自己所需的 带泛型的LambdaQueryWrapper
public class SuperEntity<T extends Model<?>> extends Model<T> {
/**
* 构造 LambdaQueryWrapper 并置入指定的 属性值与名称
*/
public static <R> LambdaQueryWrapper<R> getLambdaQueryWrapper(Class<R> clazz, PropertiesNameAndValueModel... propertiesNameAndValueModels){
LambdaQueryWrapper<R> lambdaQueryWrapper = new LambdaQueryWrapper<>();
String template = "{0}={1}";
Stream.of(propertiesNameAndValueModels).forEach(item->{
String format = MessageFormat.format(template, item.getName(), item.getValue());
lambdaQueryWrapper.apply(format);
});
return lambdaQueryWrapper;
}
/**
* 构造 LambdaQueryWrapper 并置入指定的 删除与状态的值
*/
public static <R> LambdaQueryWrapper<R> getLambdaQueryWrapper(Class<R> clazz){
PropertiesNameAndValueModel deleteStatus = new PropertiesNameAndValueModel("delete_status", CommonEnum.IsJudge.FALSE.getCode().toString());
PropertiesNameAndValueModel status = new PropertiesNameAndValueModel("status", CommonEnum.IsJudge.TRUE.getCode().toString());
return getLambdaQueryWrapper(clazz,deleteStatus,status);
}
}
入参实体,存放属性名和属性值
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PropertiesNameAndValueModel implements Serializable {
private static final long serialVersionUID = 6088163419961691009L;
/**
* 属性名
*/
private String name;
/**
* 属性值
*/
private String value;
}
调用方
LambdaQueryWrapper<Product> lambdaQueryWrapper = SuperEntity.getLambdaQueryWrapper(Product.class);