Skip to content

Commit 6b9cd98

Browse files
authored
Merge pull request #37 from codingapi/3.x
3.x
2 parents c4bc780 + b902e90 commit 6b9cd98

File tree

19 files changed

+303
-85
lines changed

19 files changed

+303
-85
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
<groupId>com.codingapi.springboot</groupId>
1414
<artifactId>springboot-parent</artifactId>
15-
<version>3.1.8</version>
15+
<version>3.1.9</version>
1616

1717
<url>https://github.com/codingapi/springboot-framewrok</url>
1818
<name>springboot-parent</name>

springboot-starter-data-fast/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>springboot-parent</artifactId>
77
<groupId>com.codingapi.springboot</groupId>
8-
<version>3.1.8</version>
8+
<version>3.1.9</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQuery.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ public List<?> listQuery(Class<?> clazz, String sql, Object... params) {
2424
return query.getResultList();
2525
}
2626

27+
28+
public Page<?> pageQuery(Class<?> clazz, String sql, PageRequest pageRequest, Object... params) {
29+
return pageQuery(clazz,sql,"select count(1) " + sql,pageRequest,params);
30+
}
31+
2732
public Page<?> pageQuery(Class<?> clazz, String sql, String countSql, PageRequest pageRequest, Object... params) {
2833
TypedQuery<?> query = entityManager.createQuery(sql, clazz);
2934
if (params != null) {

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ default Page<T> dynamicPageQuery(String sql, String countSql, PageRequest reques
3131
}
3232

3333
default Page<T> dynamicPageQuery(String sql, PageRequest request, Object... params) {
34-
return (Page<T>) JpaQueryContext.getInstance().getJPAQuery().pageQuery(getEntityClass(), sql, "select count(1) " + sql, request, params);
34+
return (Page<T>) JpaQueryContext.getInstance().getJPAQuery().pageQuery(getEntityClass(), sql, request, params);
3535
}
3636

3737
default <V> Page<V> dynamicPageQuery(Class<V> clazz, String sql, String countSql, PageRequest request, Object... params) {
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,32 @@
33
import com.codingapi.springboot.framework.dto.request.Filter;
44
import com.codingapi.springboot.framework.dto.request.PageRequest;
55
import com.codingapi.springboot.framework.dto.request.RequestFilter;
6+
import lombok.extern.slf4j.Slf4j;
67
import org.springframework.data.domain.Sort;
78

89
import java.util.ArrayList;
910
import java.util.Arrays;
1011
import java.util.List;
1112

12-
public class DynamicRequest {
13+
/**
14+
* 动态条件查询组装
15+
*/
16+
@Slf4j
17+
class DynamicSQLBuilder {
1318

1419
private final PageRequest request;
1520
private final Class<?> clazz;
1621

1722
private final List<Object> params = new ArrayList<>();
1823
private int paramIndex = 1;
1924

20-
public DynamicRequest(PageRequest request, Class<?> clazz) {
25+
public DynamicSQLBuilder(PageRequest request, Class<?> clazz) {
2126
this.request = request;
2227
this.clazz = clazz;
2328
}
2429

2530

26-
public String getHql() {
31+
public String getHQL() {
2732
StringBuilder hql = new StringBuilder("FROM " + clazz.getSimpleName() + " WHERE ");
2833
RequestFilter requestFilter = request.getRequestFilter();
2934
if (requestFilter.hasFilter()) {
@@ -50,6 +55,8 @@ public String getHql() {
5055
}
5156
}
5257

58+
log.debug("hql:{}", hql);
59+
log.debug("params:{}", params);
5360
return hql.toString();
5461
}
5562

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@
88

99
import java.beans.PropertyDescriptor;
1010

11-
public class ExampleRequest {
11+
/**
12+
* Example组装
13+
*/
14+
class ExampleBuilder {
1215

1316
private final PageRequest request;
1417
private final Class<?> clazz;
1518

16-
public ExampleRequest(PageRequest request, Class<?> clazz) {
19+
public ExampleBuilder(PageRequest request, Class<?> clazz) {
1720
this.request = request;
1821
this.clazz = clazz;
1922
}

springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
package com.codingapi.springboot.fast.jpa.repository;
22

33
import com.codingapi.springboot.framework.dto.request.PageRequest;
4+
import com.codingapi.springboot.framework.dto.request.SearchRequest;
45
import org.springframework.core.ResolvableType;
56
import org.springframework.data.domain.Page;
67
import org.springframework.data.jpa.repository.JpaRepository;
78
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
89
import org.springframework.data.repository.NoRepositoryBean;
910

11+
/**
12+
* 更强大的Repository对象
13+
* @param <T>
14+
* @param <ID>
15+
*/
1016
@NoRepositoryBean
1117
public interface FastRepository<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T>, DynamicRepository<T, ID> {
1218

1319
default Page<T> findAll(PageRequest request) {
1420
if (request.hasFilter()) {
1521
Class<T> clazz = getDomainClass();
16-
ExampleRequest exampleRequest = new ExampleRequest(request, clazz);
17-
return findAll(exampleRequest.getExample(), request);
22+
ExampleBuilder exampleBuilder = new ExampleBuilder(request, clazz);
23+
return findAll(exampleBuilder.getExample(), request);
1824
}
1925
return findAll((org.springframework.data.domain.PageRequest) request);
2026
}
@@ -30,10 +36,16 @@ default Class<T> getDomainClass() {
3036
default Page<T> pageRequest(PageRequest request) {
3137
if (request.hasFilter()) {
3238
Class<T> clazz = getDomainClass();
33-
DynamicRequest dynamicRequest = new DynamicRequest(request,clazz);
34-
return dynamicPageQuery(dynamicRequest.getHql(), request, dynamicRequest.getParams());
39+
DynamicSQLBuilder dynamicSQLBuilder = new DynamicSQLBuilder(request, clazz);
40+
return dynamicPageQuery(dynamicSQLBuilder.getHQL(), request, dynamicSQLBuilder.getParams());
3541
}
3642
return findAll((org.springframework.data.domain.PageRequest) request);
3743
}
3844

45+
46+
default Page<T> searchRequest(SearchRequest request) {
47+
Class<T> clazz = getDomainClass();
48+
return pageRequest(request.toPageRequest(clazz));
49+
}
50+
3951
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.codingapi.springboot.fast.jpa.repository;
2+
3+
import com.codingapi.springboot.framework.domain.ISort;
4+
import com.codingapi.springboot.framework.dto.request.SortRequest;
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
import org.springframework.data.repository.NoRepositoryBean;
7+
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
@NoRepositoryBean
12+
public interface SortRepository<T extends ISort, ID> extends JpaRepository<T, ID> {
13+
14+
15+
default void reSort(SortRequest request) {
16+
if (request != null && !request.getIds().isEmpty()) {
17+
List<T> list = new ArrayList<>();
18+
int minSort = Integer.MAX_VALUE;
19+
for (Object objectId : request.getIds()) {
20+
ID id = (ID) objectId;
21+
T t = getReferenceById(id);
22+
if (t.getSort() == null) {
23+
minSort = 0;
24+
} else {
25+
if (t.getSort() < minSort) {
26+
minSort = t.getSort();
27+
}
28+
}
29+
list.add(t);
30+
}
31+
for (T t : list) {
32+
t.setSort(minSort++);
33+
}
34+
saveAll(list);
35+
}
36+
}
37+
38+
39+
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ void pageRequest() {
7070
PageRequest request = new PageRequest();
7171
request.setCurrent(1);
7272
request.setPageSize(10);
73-
request.andFilter("name", Relation.LIKE, "%2%");
73+
request.addFilter("name", Relation.LIKE, "%2%");
7474

7575
Page<Demo> page = demoRepository.pageRequest(request);
7676
assertEquals(1, page.getTotalElements());
@@ -92,7 +92,7 @@ void customInSearch() {
9292
request.setCurrent(1);
9393
request.setPageSize(10);
9494

95-
request.andFilter("id", Relation.IN, 1, 2, 3);
95+
request.addFilter("id", Relation.IN, 1, 2, 3);
9696

9797
Page<Demo> page = demoRepository.pageRequest(request);
9898
log.info("demo:{}", page.getContent());
@@ -112,7 +112,7 @@ void customOrSearch() {
112112
demoRepository.save(demo2);
113113

114114
PageRequest request = new PageRequest();
115-
request.setCurrent(1);
115+
request.setCurrent(0);
116116
request.setPageSize(10);
117117

118118

@@ -172,7 +172,7 @@ void sortQuery() {
172172
demoRepository.save(demo2);
173173

174174
PageRequest request = new PageRequest();
175-
request.setCurrent(1);
175+
request.setCurrent(0);
176176
request.setPageSize(10);
177177

178178
request.addSort(Sort.by("id").descending());

springboot-starter-security-jwt/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<parent>
77
<artifactId>springboot-parent</artifactId>
88
<groupId>com.codingapi.springboot</groupId>
9-
<version>3.1.8</version>
9+
<version>3.1.9</version>
1010
</parent>
1111

1212
<artifactId>springboot-starter-security-jwt</artifactId>

springboot-starter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>com.codingapi.springboot</groupId>
77
<artifactId>springboot-parent</artifactId>
8-
<version>3.1.8</version>
8+
<version>3.1.9</version>
99
</parent>
1010
<artifactId>springboot-starter</artifactId>
1111

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.codingapi.springboot.framework.domain;
2+
3+
public interface ISort {
4+
5+
void setSort(Integer sort);
6+
7+
Integer getSort();
8+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public Filter(String key, Object... value) {
2525
}
2626

2727
public Filter(String key, Filter... value) {
28-
this(key, null, value);
28+
this(key, null, value);
2929
}
3030

3131
public static Filter as(String key, Relation relation, Object... value) {

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

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

3-
import jakarta.servlet.http.HttpServletRequest;
43
import lombok.Getter;
4+
import lombok.Setter;
55
import org.springframework.data.domain.Pageable;
66
import org.springframework.data.domain.Sort;
7-
import org.springframework.web.context.request.RequestContextHolder;
8-
import org.springframework.web.context.request.ServletRequestAttributes;
97

108
import java.util.Optional;
119

1210
public class PageRequest extends org.springframework.data.domain.PageRequest {
1311

1412
@Getter
13+
@Setter
1514
private int current;
15+
16+
@Setter
17+
@Getter
1618
private int pageSize;
1719

1820
@Getter
1921
private final RequestFilter requestFilter = new RequestFilter();
2022

21-
@Getter
22-
private HttpServletRequest servletRequest;
2323

2424
private org.springframework.data.domain.PageRequest pageRequest;
2525

@@ -28,43 +28,13 @@ public PageRequest(int current, int pageSize, Sort sort) {
2828
this.current = current;
2929
this.pageSize = pageSize;
3030
this.pageRequest = org.springframework.data.domain.PageRequest.of(current, pageSize, sort);
31-
32-
try {
33-
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
34-
this.servletRequest = attributes.getRequest();
35-
requestFilter.syncParameter(servletRequest);
36-
} catch (Exception e) {
37-
}
3831
}
3932

4033

4134
public PageRequest() {
4235
this(0, 20, Sort.unsorted());
4336
}
4437

45-
public void setCurrent(int current) {
46-
this.current = current > 0 ? current - 1 : 0;
47-
this.requestFilter.deleteFilter("current");
48-
}
49-
50-
public String getParameter(String key) {
51-
return servletRequest.getParameter(key);
52-
}
53-
54-
public String getParameter(String key, String defaultValue) {
55-
String result = servletRequest.getParameter(key);
56-
return result == null ? defaultValue : result;
57-
}
58-
59-
public int getIntParameter(String key) {
60-
return Integer.parseInt(servletRequest.getParameter(key));
61-
}
62-
63-
public int getIntParameter(String key, int defaultValue) {
64-
String result = servletRequest.getParameter(key);
65-
return result == null ? defaultValue : Integer.parseInt(result);
66-
}
67-
6838
public String getStringFilter(String key) {
6939
return requestFilter.getStringFilter(key);
7040
}
@@ -85,15 +55,6 @@ public boolean hasFilter() {
8555
return requestFilter.hasFilter();
8656
}
8757

88-
@Override
89-
public int getPageSize() {
90-
return pageSize;
91-
}
92-
93-
public void setPageSize(int pageSize) {
94-
this.pageSize = pageSize;
95-
this.requestFilter.deleteFilter("pageSize");
96-
}
9758

9859
@Override
9960
public Sort getSort() {
@@ -164,7 +125,11 @@ public void addSort(Sort sort) {
164125
}
165126
}
166127

167-
public PageRequest andFilter(String key, Relation relation, Object... value) {
128+
public void removeFilter(String key) {
129+
requestFilter.removeFilter(key);
130+
}
131+
132+
public PageRequest addFilter(String key, Relation relation, Object... value) {
168133
requestFilter.addFilter(key, relation, value);
169134
return this;
170135
}
@@ -174,8 +139,8 @@ public PageRequest addFilter(String key, Object... value) {
174139
return this;
175140
}
176141

177-
public PageRequest andFilter(Filter... value) {
178-
requestFilter.andFilters(value);
142+
public PageRequest andFilter(Filter... filters) {
143+
requestFilter.andFilters(filters);
179144
return this;
180145
}
181146

0 commit comments

Comments
 (0)