Skip to content

Commit 3357362

Browse files
committed
fix Filter
1 parent f2777e1 commit 3357362

File tree

5 files changed

+65
-11
lines changed

5 files changed

+65
-11
lines changed

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/query/QueryRequest.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public <T> List<Order> getOrder(Root<T> root, CriteriaBuilder criteriaBuilder) {
7777

7878
private <T> Predicate toPredicate(Filter filter, CriteriaBuilder criteriaBuilder, Root<T> root, List<String> properties) {
7979
String key = filter.getKey();
80-
if (filter.isOr() || properties.contains(key)) {
80+
if (filter.isAddFilters() || filter.isOrFilters() || properties.contains(key)) {
8181

8282
if (filter.isEqual()) {
8383
return criteriaBuilder.equal(root.get(key), filter.getValue()[0]);
@@ -165,7 +165,7 @@ private <T> Predicate toPredicate(Filter filter, CriteriaBuilder criteriaBuilder
165165
return in;
166166
}
167167

168-
if (filter.isOr()) {
168+
if (filter.isOrFilters()) {
169169
Filter[] orFilters = (Filter[]) filter.getValue();
170170
List<Predicate> orPredicates = new ArrayList<>();
171171
for (Filter orFilter : orFilters) {
@@ -176,6 +176,18 @@ private <T> Predicate toPredicate(Filter filter, CriteriaBuilder criteriaBuilder
176176
}
177177
return criteriaBuilder.or(orPredicates.toArray(new Predicate[0]));
178178
}
179+
180+
if (filter.isAddFilters()) {
181+
Filter[] orFilters = (Filter[]) filter.getValue();
182+
List<Predicate> addPredicates = new ArrayList<>();
183+
for (Filter orFilter : orFilters) {
184+
Predicate predicate = toPredicate(orFilter, criteriaBuilder, root, properties);
185+
if (predicate != null) {
186+
addPredicates.add(predicate);
187+
}
188+
}
189+
return criteriaBuilder.and(addPredicates.toArray(new Predicate[0]));
190+
}
179191
}
180192
return null;
181193
}

springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ void pageRequest() {
7777
}
7878

7979
@Test
80-
void customSearchOr() {
80+
void customSearchOrFilters() {
8181
demoRepository.deleteAll();
8282
Demo demo1 = new Demo();
8383
demo1.setName("123");
@@ -97,6 +97,27 @@ void customSearchOr() {
9797
assertEquals(2, page.getTotalElements());
9898
}
9999

100+
@Test
101+
void customSearchAddFilters() {
102+
demoRepository.deleteAll();
103+
Demo demo1 = new Demo();
104+
demo1.setName("123");
105+
demoRepository.save(demo1);
106+
107+
Demo demo2 = new Demo();
108+
demo2.setName("456");
109+
demoRepository.save(demo2);
110+
111+
PageRequest request = new PageRequest();
112+
request.setCurrent(1);
113+
request.setPageSize(10);
114+
115+
// request.addFilters(Filter.as("id", Relation.IN, 1),Filter.as("id", Relation.IN, 2),Filter.as("id", Relation.IN, 3),Filter.as("id", Relation.IN, 4));
116+
request.orFilters(Filter.as("name", Relation.LIKE, "%2%"),Filter.and(Filter.as("id", Relation.IN, 1),Filter.as("id", Relation.IN, 2)));
117+
Page<Demo> page = demoRepository.pageRequest(request);
118+
assertEquals(2, page.getTotalElements());
119+
}
120+
100121

101122
@Test
102123
void dynamicListQuery() {

springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/Filter.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
@Getter
99
public class Filter {
1010

11+
public static final String FILTER_OR_KEY = "FILTER_OR_KEY";
12+
public static final String FILTER_ADD_KEY = "FILTER_ADD_KEY";
13+
1114
private String key;
1215
private Object[] value;
1316
private Relation relation;
@@ -22,8 +25,8 @@ public Filter(String key, Object... value) {
2225
this(key, Relation.EQUAL, value);
2326
}
2427

25-
public Filter(Filter... value) {
26-
this(null, null, value);
28+
public Filter(String key, Filter... value) {
29+
this(key, null, value);
2730
}
2831

2932
public static Filter as(String key, Relation relation, Object... value) {
@@ -34,8 +37,12 @@ public static Filter as(String key, Object... value) {
3437
return new Filter(key, value);
3538
}
3639

37-
public static Filter as(Filter... value) {
38-
return new Filter(value);
40+
public static Filter and(Filter... value) {
41+
return new Filter(FILTER_ADD_KEY, value);
42+
}
43+
44+
public static Filter or(Filter... value) {
45+
return new Filter(FILTER_OR_KEY, value);
3946
}
4047

4148
public boolean isEqual() {
@@ -54,8 +61,12 @@ public boolean isIn() {
5461
return relation == Relation.IN;
5562
}
5663

57-
public boolean isOr() {
58-
return value != null && value.length > 0 && value[0] instanceof Filter;
64+
public boolean isOrFilters() {
65+
return FILTER_OR_KEY.equals(key);
66+
}
67+
68+
public boolean isAddFilters() {
69+
return FILTER_ADD_KEY.equals(key);
5970
}
6071

6172
public boolean isGreaterThan() {

springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,11 @@ public PageRequest addFilter(String key, Object... value) {
172172
return this;
173173
}
174174

175+
public PageRequest addFilters(Filter... filters) {
176+
requestFilter.addFilters(filters);
177+
return this;
178+
}
179+
175180
public PageRequest orFilters(Filter... filters) {
176181
requestFilter.orFilters(filters);
177182
return this;

springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.codingapi.springboot.framework.dto.request;
22

33

4-
import javax.servlet.http.HttpServletRequest;
54
import org.springframework.util.StringUtils;
65

6+
import javax.servlet.http.HttpServletRequest;
77
import java.util.*;
88

99
public class RequestFilter {
@@ -21,8 +21,13 @@ public RequestFilter addFilter(String key, Object... value) {
2121
return this;
2222
}
2323

24+
public RequestFilter addFilters(Filter... value) {
25+
this.pushFilter(new Filter(Filter.FILTER_ADD_KEY, value));
26+
return this;
27+
}
28+
2429
public RequestFilter orFilters(Filter... value) {
25-
this.pushFilter(new Filter(value));
30+
this.pushFilter(new Filter(Filter.FILTER_OR_KEY, value));
2631
return this;
2732
}
2833

0 commit comments

Comments
 (0)