package cn.timer.api.config.specification; import java.util.ArrayList; import java.util.List; import org.springframework.data.jpa.domain.Specification; /** * Created by Tang on 2019/11/4. */ public class SimpleSpecificationBuilder<T> { /** * 条件列表 */ private List<SpecificationOperator> opers; /** * 构造函数,初始化的条件是and */ public SimpleSpecificationBuilder(String key, String oper, Object value) { SpecificationOperator so = new SpecificationOperator(); so.setJoin("and"); so.setKey(key); so.setOper(oper); so.setValue(value); opers = new ArrayList<SpecificationOperator>(); opers.add(so); } public SimpleSpecificationBuilder() { opers = new ArrayList<SpecificationOperator>(); } /** * 完成条件的添加 * * @return */ @SuppressWarnings("rawtypes") public SimpleSpecificationBuilder add(String key, String oper, Object value, String join) { SpecificationOperator so = new SpecificationOperator(); so.setKey(key); so.setValue(value); so.setOper(oper); so.setJoin(join); opers.add(so); return this; } /** * 添加or条件的重载 * * @return this,方便后续的链式调用 */ @SuppressWarnings("rawtypes") public SimpleSpecificationBuilder addOr(String key, String oper, Object value) { return this.add(key, oper, value, "or"); } /** * 添加and的条件 * * @return */ @SuppressWarnings("rawtypes") public SimpleSpecificationBuilder add(String key, String oper, Object value) { return this.add(key, oper, value, "and"); } @SuppressWarnings("rawtypes") public Specification generateSpecification() { Specification<T> specification = new SimpleSpecification<T>(opers); return specification; } }