济南建网站app,asp.net网站sql权限设置,html网站支付链接怎么做,阳泉企业网站建设公司Specification 工作中的一些扩展
我们在实际工作中会发现#xff0c;如果上面的逻辑#xff0c;简单重复写总感觉是不是可以抽出一些公用方法呢#xff0c;此时引入一种工厂模式#xff0c;帮我们做一些事情#xff0c;可以让代码更加优雅。基于 JpaSpecificationExecuto…Specification 工作中的一些扩展
我们在实际工作中会发现如果上面的逻辑简单重复写总感觉是不是可以抽出一些公用方法呢此时引入一种工厂模式帮我们做一些事情可以让代码更加优雅。基于 JpaSpecificationExecutor 的思路我们创建一个 SpecificationFactory.Java 内容如下
public final class SpecificationFactory {/*** 模糊查询匹配对应字段*/public static Specification containsLike(String attribute, String value) {return (root, query, cb)- cb.like(root.get(attribute), % value %);}/*** 某字段的值等于 value 的查询条件*/public static Specification equal(String attribute, Object value) {return (root, query, cb) - cb.equal(root.get(attribute),value);}/*** 获取对应属性的值所在区间*/public static Specification isBetween(String attribute, int min, int max) {return (root, query, cb) - cb.between(root.get(attribute), min, max);}public static Specification isBetween(String attribute, double min, double max) {return (root, query, cb) - cb.between(root.get(attribute), min, max);}public static Specification isBetween(String attribute, Date min, Date max) {return (root, query, cb) - cb.between(root.get(attribute), min, max);}/*** 通过属性名和集合实现 in 查询*/public static Specification in(String attribute, Collection c) {return (root, query, cb) -root.get(attribute).in(c);}/*** 通过属性名构建大于等于 Value 的查询条件*/public static Specification greaterThan(String attribute, BigDecimal value) {return (root, query, cb) -cb.greaterThan(root.get(attribute),value);}public static Specification greaterThan(String attribute, Long value) {return (root, query, cb) -cb.greaterThan(root.get(attribute),value);}
......
}
PS可以根据实际工作需要和场景进行不断扩充。 调用实例1
userRepository.findAll(SpecificationFactory.containsLike(firstName, userParam.getLastName()),pageable);
是不是发现代码一下子少了很多
配合 Specifications 使用调用实例2
userRepository.findAll(Specifications.where(SpecificationFactory.containsLike(firstName, userParam.getLastName())).and(SpecificationFactory.greaterThan(version,userParam.getVersion())),pageable);
和我们前面举的例子比起来是不是代码更加优雅、可读性更加强了