一个简单的Specification查询的工具类,可以自行扩展,扩展方法就是将一些手写创建的Specification语句抽象到一个方法内,写到工具类里。

1、代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import org.springframework.data.jpa.domain.Specification;
import java.util.Collection;
/**
* Created by Administrator on 2017/7/13 0013.
*/
public final class SpecificationFactory {
/**
* 模糊查询,匹配对应字段
* @param attribute
* @param value
* @return
*/
public static Specification containsLike(String attribute, String value) {
return (root, query, cb) -> cb.like(root.get(attribute), "%" + value + "%");
}
/**
* 某字段的值等于value的查询条件
* @param attribute
* @param value
* @return
*/
public static Specification equal(String attribute, Object value) {
return (root, query, cb) -> cb.equal(root.get(attribute),value);
}
/**
* 获取对应属性的值所在区间
* @param attribute
* @param min
* @param max
* @return
*/
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);
}
/**
* 通过属性名和集合实现in查询
* @param attribute
* @param c
* @return
*/
public static Specification in(String attribute, Collection c) {
return (root, query, cb) -> root.get(attribute).in(c);
}
}

2、用法

Specification<Customer> spec2 = Specifications
                .where(SpecificationFactory.containsLike("firstName","bau"))
                .or(SpecificationFactory.containsLike("lastName","bau"));