From 00aa586ca09e81a227ba8337e197e22a98489023 Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Sat, 6 Jan 2024 00:16:07 +0800 Subject: [PATCH 01/10] add SearchRequest --- pom.xml | 2 +- springboot-starter-data-fast/pom.xml | 2 +- .../fast/jpa/repository/DynamicRequest.java | 2 + .../fast/jpa/repository/FastRepository.java | 8 +- .../fast/jpa/repository/SearchRequest.java | 148 ++++++++++++++++++ .../springboot/fast/DemoRepositoryTest.java | 8 +- springboot-starter-security-jwt/pom.xml | 2 +- springboot-starter/pom.xml | 2 +- .../framework/dto/request/Filter.java | 2 +- .../framework/dto/request/PageRequest.java | 55 +------ .../dto/request/PageRequestTest.java | 2 +- .../query/test/DemoRepositoryTest.java | 4 +- 12 files changed, 177 insertions(+), 60 deletions(-) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java diff --git a/pom.xml b/pom.xml index 6da224a2..5e89b3e9 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ com.codingapi.springboot springboot-parent - 3.1.8 + 3.1.9.dev https://github.com/codingapi/springboot-framewrok springboot-parent diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml index 47e1f703..93d8c382 100644 --- a/springboot-starter-data-fast/pom.xml +++ b/springboot-starter-data-fast/pom.xml @@ -5,7 +5,7 @@ springboot-parent com.codingapi.springboot - 3.1.8 + 3.1.9.dev 4.0.0 diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRequest.java index ef91f3c6..f6be561c 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRequest.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRequest.java @@ -50,6 +50,8 @@ public String getHql() { } } + System.out.println(hql); + System.out.println(params); return hql.toString(); } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java index 4b55b787..8b00d051 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java @@ -30,10 +30,16 @@ default Class getDomainClass() { default Page pageRequest(PageRequest request) { if (request.hasFilter()) { Class clazz = getDomainClass(); - DynamicRequest dynamicRequest = new DynamicRequest(request,clazz); + DynamicRequest dynamicRequest = new DynamicRequest(request, clazz); return dynamicPageQuery(dynamicRequest.getHql(), request, dynamicRequest.getParams()); } return findAll((org.springframework.data.domain.PageRequest) request); } + + default Page searchRequest(SearchRequest request) { + Class clazz = getDomainClass(); + return pageRequest(request.toPageRequest(clazz)); + } + } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java new file mode 100644 index 00000000..401f90e3 --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java @@ -0,0 +1,148 @@ +package com.codingapi.springboot.fast.jpa.repository; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.codingapi.springboot.framework.dto.request.PageRequest; +import com.codingapi.springboot.framework.dto.request.Relation; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.data.domain.Sort; +import org.springframework.util.StringUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; + + +public class SearchRequest { + + private int current; + private int pageSize; + + private final HttpServletRequest request; + + private final List removeKeys = new ArrayList<>(); + + private final PageRequest pageRequest; + + public SearchRequest() { + ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); + this.request = attributes.getRequest(); + this.pageRequest = new PageRequest(); + } + + public void setCurrent(int current) { + this.current = current - 1; + this.removeKeys.add("current"); + } + + public void setPageSize(int pageSize) { + this.pageSize = pageSize; + this.removeKeys.add("pageSize"); + } + + private String decode(String value) { + return new String(Base64.getDecoder().decode(value)); + } + + + static class ClassContent { + + private final Class clazz; + private final PageRequest pageRequest; + + public ClassContent(Class clazz, PageRequest pageRequest) { + this.clazz = clazz; + this.pageRequest = pageRequest; + } + + public void addFilter(String key, String value) { + Class keyClass = getKeyClass(key); + Object v = JSON.parseObject(value, keyClass); + pageRequest.addFilter(key, Relation.EQUAL, v); + } + + public void addFilter(String key, List value) { + Class keyClass = getKeyClass(key); + pageRequest.addFilter(key, Relation.IN, value.stream() + .map(v -> JSON.parseObject(v, keyClass)) + .toArray() + ); + } + + + private Class getKeyClass(String key) { + String[] keys = key.split("\\."); + Class keyClass = clazz; + for (String k : keys) { + Field[] fields = keyClass.getDeclaredFields(); + for (Field field : fields) { + if (field.getName().equals(k)) { + keyClass = field.getType(); + break; + } + } + } + return keyClass; + } + + } + + PageRequest toPageRequest(Class clazz) { + pageRequest.setCurrent(current); + pageRequest.setPageSize(pageSize); + + ClassContent content = new ClassContent(clazz, pageRequest); + + String sort = request.getParameter("sort"); + if (StringUtils.hasLength(sort)) { + sort = decode(sort); + if (JSON.isValid(sort)) { + removeKeys.add("sort"); + JSONObject jsonObject = JSON.parseObject(sort); + for (String key : jsonObject.keySet()) { + String value = jsonObject.getString(key); + if ("ascend".equals(value)) { + pageRequest.addSort(Sort.by(key).ascending()); + } else { + pageRequest.addSort(Sort.by(key).descending()); + } + } + } + } + + + String filter = request.getParameter("filter"); + if (StringUtils.hasLength(filter)) { + filter = decode(filter); + if (JSON.isValid(filter)) { + removeKeys.add("filter"); + JSONObject jsonObject = JSON.parseObject(filter); + for (String key : jsonObject.keySet()) { + JSONArray value = jsonObject.getJSONArray(key); + if (value != null && !value.isEmpty()) { + List values = value.stream().map(Object::toString).toList(); + content.addFilter(key, values); + } + } + } + } + + + request.getParameterNames().asIterator().forEachRemaining(key -> { + if (!removeKeys.contains(key)) { + String value = request.getParameter(key); + if (StringUtils.hasLength(value)) { + content.addFilter(key, value); + } + } + }); + + return pageRequest; + } + + +} diff --git a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java index 6f973873..64e20989 100644 --- a/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java +++ b/springboot-starter-data-fast/src/test/java/com/codingapi/springboot/fast/DemoRepositoryTest.java @@ -70,7 +70,7 @@ void pageRequest() { PageRequest request = new PageRequest(); request.setCurrent(1); request.setPageSize(10); - request.andFilter("name", Relation.LIKE, "%2%"); + request.addFilter("name", Relation.LIKE, "%2%"); Page page = demoRepository.pageRequest(request); assertEquals(1, page.getTotalElements()); @@ -92,7 +92,7 @@ void customInSearch() { request.setCurrent(1); request.setPageSize(10); - request.andFilter("id", Relation.IN, 1, 2, 3); + request.addFilter("id", Relation.IN, 1, 2, 3); Page page = demoRepository.pageRequest(request); log.info("demo:{}", page.getContent()); @@ -112,7 +112,7 @@ void customOrSearch() { demoRepository.save(demo2); PageRequest request = new PageRequest(); - request.setCurrent(1); + request.setCurrent(0); request.setPageSize(10); @@ -172,7 +172,7 @@ void sortQuery() { demoRepository.save(demo2); PageRequest request = new PageRequest(); - request.setCurrent(1); + request.setCurrent(0); request.setPageSize(10); request.addSort(Sort.by("id").descending()); diff --git a/springboot-starter-security-jwt/pom.xml b/springboot-starter-security-jwt/pom.xml index 54bcf40a..4728dcba 100644 --- a/springboot-starter-security-jwt/pom.xml +++ b/springboot-starter-security-jwt/pom.xml @@ -6,7 +6,7 @@ springboot-parent com.codingapi.springboot - 3.1.8 + 3.1.9.dev springboot-starter-security-jwt diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index 2af62d1f..d7cdc733 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -5,7 +5,7 @@ com.codingapi.springboot springboot-parent - 3.1.8 + 3.1.9.dev springboot-starter diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/Filter.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/Filter.java index db6c5477..55c901b8 100644 --- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/Filter.java +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/Filter.java @@ -25,7 +25,7 @@ public Filter(String key, Object... value) { } public Filter(String key, Filter... value) { - this(key, null, value); + this(key, null, value); } public static Filter as(String key, Relation relation, Object... value) { diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java index 9f4a7af9..c81cec33 100644 --- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java @@ -1,25 +1,25 @@ package com.codingapi.springboot.framework.dto.request; -import jakarta.servlet.http.HttpServletRequest; import lombok.Getter; +import lombok.Setter; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; -import org.springframework.web.context.request.RequestContextHolder; -import org.springframework.web.context.request.ServletRequestAttributes; import java.util.Optional; public class PageRequest extends org.springframework.data.domain.PageRequest { @Getter + @Setter private int current; + + @Setter + @Getter private int pageSize; @Getter private final RequestFilter requestFilter = new RequestFilter(); - @Getter - private HttpServletRequest servletRequest; private org.springframework.data.domain.PageRequest pageRequest; @@ -28,13 +28,6 @@ public PageRequest(int current, int pageSize, Sort sort) { this.current = current; this.pageSize = pageSize; this.pageRequest = org.springframework.data.domain.PageRequest.of(current, pageSize, sort); - - try { - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); - this.servletRequest = attributes.getRequest(); - requestFilter.syncParameter(servletRequest); - } catch (Exception e) { - } } @@ -42,29 +35,6 @@ public PageRequest() { this(0, 20, Sort.unsorted()); } - public void setCurrent(int current) { - this.current = current > 0 ? current - 1 : 0; - this.requestFilter.deleteFilter("current"); - } - - public String getParameter(String key) { - return servletRequest.getParameter(key); - } - - public String getParameter(String key, String defaultValue) { - String result = servletRequest.getParameter(key); - return result == null ? defaultValue : result; - } - - public int getIntParameter(String key) { - return Integer.parseInt(servletRequest.getParameter(key)); - } - - public int getIntParameter(String key, int defaultValue) { - String result = servletRequest.getParameter(key); - return result == null ? defaultValue : Integer.parseInt(result); - } - public String getStringFilter(String key) { return requestFilter.getStringFilter(key); } @@ -85,15 +55,6 @@ public boolean hasFilter() { return requestFilter.hasFilter(); } - @Override - public int getPageSize() { - return pageSize; - } - - public void setPageSize(int pageSize) { - this.pageSize = pageSize; - this.requestFilter.deleteFilter("pageSize"); - } @Override public Sort getSort() { @@ -164,7 +125,7 @@ public void addSort(Sort sort) { } } - public PageRequest andFilter(String key, Relation relation, Object... value) { + public PageRequest addFilter(String key, Relation relation, Object... value) { requestFilter.addFilter(key, relation, value); return this; } @@ -174,8 +135,8 @@ public PageRequest addFilter(String key, Object... value) { return this; } - public PageRequest andFilter(Filter... value) { - requestFilter.andFilters(value); + public PageRequest andFilter(Filter... filters) { + requestFilter.andFilters(filters); return this; } diff --git a/springboot-starter/src/test/java/com/codingapi/springboot/framework/dto/request/PageRequestTest.java b/springboot-starter/src/test/java/com/codingapi/springboot/framework/dto/request/PageRequestTest.java index e3584bfa..93028dd8 100644 --- a/springboot-starter/src/test/java/com/codingapi/springboot/framework/dto/request/PageRequestTest.java +++ b/springboot-starter/src/test/java/com/codingapi/springboot/framework/dto/request/PageRequestTest.java @@ -9,7 +9,7 @@ class PageRequestTest { @Test void test(){ PageRequest pageRequest = new PageRequest(); - pageRequest.setCurrent(2); + pageRequest.setCurrent(1); pageRequest.setPageSize(10); assertEquals(pageRequest.getCurrent(),1); diff --git a/springboot-starter/src/test/java/com/codingapi/springboot/framework/query/test/DemoRepositoryTest.java b/springboot-starter/src/test/java/com/codingapi/springboot/framework/query/test/DemoRepositoryTest.java index 6a1c31bd..e1dff7ec 100644 --- a/springboot-starter/src/test/java/com/codingapi/springboot/framework/query/test/DemoRepositoryTest.java +++ b/springboot-starter/src/test/java/com/codingapi/springboot/framework/query/test/DemoRepositoryTest.java @@ -43,7 +43,7 @@ void query(){ demoRepository.save(demo2); PageRequest request = new PageRequest(); - request.setCurrent(1); + request.setCurrent(0); request.setPageSize(10); @@ -67,7 +67,7 @@ void sort(){ demoRepository.save(demo2); PageRequest request = new PageRequest(); - request.setCurrent(1); + request.setCurrent(0); request.setPageSize(10); request.addSort(Sort.by("id").descending()); From cc680a6f2a3c9b846ee10f9e1c8d53d7db75f3dc Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Sat, 6 Jan 2024 00:34:06 +0800 Subject: [PATCH 02/10] add SearchRequest --- ...DynamicRequest.java => DynamicSQLBuilder.java} | 15 ++++++++++----- .../{ExampleRequest.java => ExampleBuilder.java} | 7 +++++-- .../fast/jpa/repository/FastRepository.java | 13 +++++++++---- .../fast/jpa/repository/SearchRequest.java | 10 ++++++---- 4 files changed, 30 insertions(+), 15 deletions(-) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/{DynamicRequest.java => DynamicSQLBuilder.java} (94%) rename springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/{ExampleRequest.java => ExampleBuilder.java} (92%) diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicSQLBuilder.java similarity index 94% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRequest.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicSQLBuilder.java index f6be561c..06705ad8 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRequest.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicSQLBuilder.java @@ -3,13 +3,18 @@ import com.codingapi.springboot.framework.dto.request.Filter; import com.codingapi.springboot.framework.dto.request.PageRequest; import com.codingapi.springboot.framework.dto.request.RequestFilter; +import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.Sort; import java.util.ArrayList; import java.util.Arrays; import java.util.List; -public class DynamicRequest { +/** + * 动态条件查询组装 + */ +@Slf4j +class DynamicSQLBuilder { private final PageRequest request; private final Class clazz; @@ -17,13 +22,13 @@ public class DynamicRequest { private final List params = new ArrayList<>(); private int paramIndex = 1; - public DynamicRequest(PageRequest request, Class clazz) { + public DynamicSQLBuilder(PageRequest request, Class clazz) { this.request = request; this.clazz = clazz; } - public String getHql() { + public String getHQL() { StringBuilder hql = new StringBuilder("FROM " + clazz.getSimpleName() + " WHERE "); RequestFilter requestFilter = request.getRequestFilter(); if (requestFilter.hasFilter()) { @@ -50,8 +55,8 @@ public String getHql() { } } - System.out.println(hql); - System.out.println(params); + log.debug("hql:{}", hql); + log.debug("params:{}", params); return hql.toString(); } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/ExampleRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/ExampleBuilder.java similarity index 92% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/ExampleRequest.java rename to springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/ExampleBuilder.java index 25ee2ed2..6b72dec3 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/ExampleRequest.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/ExampleBuilder.java @@ -8,12 +8,15 @@ import java.beans.PropertyDescriptor; -public class ExampleRequest { +/** + * Example组装 + */ +class ExampleBuilder { private final PageRequest request; private final Class clazz; - public ExampleRequest(PageRequest request, Class clazz) { + public ExampleBuilder(PageRequest request, Class clazz) { this.request = request; this.clazz = clazz; } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java index 8b00d051..523d721b 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java @@ -7,14 +7,19 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.repository.NoRepositoryBean; +/** + * 更强大的Repository对象 + * @param + * @param + */ @NoRepositoryBean public interface FastRepository extends JpaRepository, JpaSpecificationExecutor, DynamicRepository { default Page findAll(PageRequest request) { if (request.hasFilter()) { Class clazz = getDomainClass(); - ExampleRequest exampleRequest = new ExampleRequest(request, clazz); - return findAll(exampleRequest.getExample(), request); + ExampleBuilder exampleBuilder = new ExampleBuilder(request, clazz); + return findAll(exampleBuilder.getExample(), request); } return findAll((org.springframework.data.domain.PageRequest) request); } @@ -30,8 +35,8 @@ default Class getDomainClass() { default Page pageRequest(PageRequest request) { if (request.hasFilter()) { Class clazz = getDomainClass(); - DynamicRequest dynamicRequest = new DynamicRequest(request, clazz); - return dynamicPageQuery(dynamicRequest.getHql(), request, dynamicRequest.getParams()); + DynamicSQLBuilder dynamicSQLBuilder = new DynamicSQLBuilder(request, clazz); + return dynamicPageQuery(dynamicSQLBuilder.getHQL(), request, dynamicSQLBuilder.getParams()); } return findAll((org.springframework.data.domain.PageRequest) request); } diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java index 401f90e3..237a8c67 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java @@ -16,7 +16,9 @@ import java.util.Base64; import java.util.List; - +/** + * HttpServletRequest 请求参数解析成 PageRequest对象 + */ public class SearchRequest { private int current; @@ -60,13 +62,13 @@ public ClassContent(Class clazz, PageRequest pageRequest) { } public void addFilter(String key, String value) { - Class keyClass = getKeyClass(key); + Class keyClass = getKeyType(key); Object v = JSON.parseObject(value, keyClass); pageRequest.addFilter(key, Relation.EQUAL, v); } public void addFilter(String key, List value) { - Class keyClass = getKeyClass(key); + Class keyClass = getKeyType(key); pageRequest.addFilter(key, Relation.IN, value.stream() .map(v -> JSON.parseObject(v, keyClass)) .toArray() @@ -74,7 +76,7 @@ public void addFilter(String key, List value) { } - private Class getKeyClass(String key) { + private Class getKeyType(String key) { String[] keys = key.split("\\."); Class keyClass = clazz; for (String k : keys) { From 233b0c89b5025b153a16ca4d914d451d3b09b5a3 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Sat, 6 Jan 2024 17:53:13 +0800 Subject: [PATCH 03/10] fix RequestFilter.java --- .../framework/dto/request/RequestFilter.java | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java index fe2f087f..2e1ac3c6 100644 --- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java @@ -1,9 +1,11 @@ package com.codingapi.springboot.framework.dto.request; -import jakarta.servlet.http.HttpServletRequest; import org.springframework.util.StringUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; public class RequestFilter { @@ -40,17 +42,6 @@ public void pushFilter(Filter filter) { filterMap.put(filter.getKey(), filter); } - public void syncParameter(HttpServletRequest servletRequest) { - Enumeration enumeration = servletRequest.getParameterNames(); - while (enumeration.hasMoreElements()) { - String key = enumeration.nextElement(); - String value = servletRequest.getParameter(key); - if (StringUtils.hasText(value)) { - addFilter(key, value); - } - } - } - public String getStringFilter(String key) { Filter filter = filterMap.get(key); From a322e4947b82f3c49d993689217121c13d90bfcd Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Sat, 6 Jan 2024 18:14:50 +0800 Subject: [PATCH 04/10] fix RequestFilter.java --- .../fast/jpa/repository/SearchRequest.java | 27 +++++++++++++++++++ .../framework/dto/request/PageRequest.java | 4 +++ .../framework/dto/request/RequestFilter.java | 6 ++--- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java index 237a8c67..c478ab47 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java @@ -3,6 +3,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.codingapi.springboot.framework.dto.request.Filter; import com.codingapi.springboot.framework.dto.request.PageRequest; import com.codingapi.springboot.framework.dto.request.Relation; import jakarta.servlet.http.HttpServletRequest; @@ -46,6 +47,32 @@ public void setPageSize(int pageSize) { this.removeKeys.add("pageSize"); } + public void addSort(Sort sort) { + pageRequest.addSort(sort); + } + + public void removeFilter(String key) { + pageRequest.removeFilter(key); + } + + public PageRequest addFilter(String key, Relation relation, Object... value) { + return pageRequest.addFilter(key, relation, value); + } + + public PageRequest addFilter(String key, Object... value) { + return pageRequest.addFilter(key, value); + } + + public PageRequest andFilter(Filter... filters) { + return pageRequest.andFilter(filters); + } + + public PageRequest orFilters(Filter... filters) { + return pageRequest.orFilters(filters); + } + + + private String decode(String value) { return new String(Base64.getDecoder().decode(value)); } diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java index c81cec33..ff5b3df5 100644 --- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/PageRequest.java @@ -125,6 +125,10 @@ public void addSort(Sort sort) { } } + public void removeFilter(String key) { + requestFilter.removeFilter(key); + } + public PageRequest addFilter(String key, Relation relation, Object... value) { requestFilter.addFilter(key, relation, value); return this; diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java index 2e1ac3c6..0773eac8 100644 --- a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/RequestFilter.java @@ -89,8 +89,8 @@ public Filter getFilter(String name) { return this.filterMap.get(name); } - public void deleteFilter(String current) { - this.filterMap.remove(current); - this.filterList.removeIf(item -> item.getKey().equals(current)); + public void removeFilter(String key) { + this.filterMap.remove(key); + this.filterList.removeIf(item -> item.getKey().equals(key)); } } From 35023c8d50ff3ef059401586348ed1216d927ab1 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Sat, 6 Jan 2024 18:21:20 +0800 Subject: [PATCH 05/10] fix SearchRequest.java --- .../springboot/fast/jpa/repository/FastRepository.java | 1 + .../springboot/framework/dto/request}/SearchRequest.java | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) rename {springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository => springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request}/SearchRequest.java (94%) diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java index 523d721b..d3e2deb8 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/FastRepository.java @@ -1,6 +1,7 @@ package com.codingapi.springboot.fast.jpa.repository; import com.codingapi.springboot.framework.dto.request.PageRequest; +import com.codingapi.springboot.framework.dto.request.SearchRequest; import org.springframework.core.ResolvableType; import org.springframework.data.domain.Page; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SearchRequest.java similarity index 94% rename from springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java rename to springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SearchRequest.java index c478ab47..9eabb215 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SearchRequest.java +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SearchRequest.java @@ -1,11 +1,8 @@ -package com.codingapi.springboot.fast.jpa.repository; +package com.codingapi.springboot.framework.dto.request; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.codingapi.springboot.framework.dto.request.Filter; -import com.codingapi.springboot.framework.dto.request.PageRequest; -import com.codingapi.springboot.framework.dto.request.Relation; import jakarta.servlet.http.HttpServletRequest; import org.springframework.data.domain.Sort; import org.springframework.util.StringUtils; @@ -120,7 +117,7 @@ private Class getKeyType(String key) { } - PageRequest toPageRequest(Class clazz) { + public PageRequest toPageRequest(Class clazz) { pageRequest.setCurrent(current); pageRequest.setPageSize(pageSize); From 718036bcdc7a6504176521e73f030602165c6c63 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Sat, 6 Jan 2024 21:59:43 +0800 Subject: [PATCH 06/10] fix SortRepository --- .../fast/jpa/repository/SortRepository.java | 35 +++++++++++++++++++ .../springboot/framework/domain/ISort.java | 8 +++++ .../framework/dto/request/SortRequest.java | 14 ++++++++ 3 files changed, 57 insertions(+) create mode 100644 springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java create mode 100644 springboot-starter/src/main/java/com/codingapi/springboot/framework/domain/ISort.java create mode 100644 springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SortRequest.java diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java new file mode 100644 index 00000000..9bbbeb9b --- /dev/null +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java @@ -0,0 +1,35 @@ +package com.codingapi.springboot.fast.jpa.repository; + +import com.codingapi.springboot.framework.domain.ISort; +import com.codingapi.springboot.framework.dto.request.SortRequest; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.repository.NoRepositoryBean; + +import java.util.ArrayList; +import java.util.List; + +@NoRepositoryBean +public interface SortRepository extends JpaRepository { + + + default void reSort(SortRequest request) { + if (request != null && !request.getIds().isEmpty()) { + List list = new ArrayList<>(); + int minSort = 0; + for (Object objectId : request.getIds()) { + ID id = (ID) objectId; + T t = getReferenceById(id); + if (t.getSort() != null && t.getSort() < minSort) { + minSort = t.getSort(); + } + list.add(t); + } + for (T t : list) { + t.setSort(minSort++); + } + saveAll(list); + } + } + + +} diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/domain/ISort.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/domain/ISort.java new file mode 100644 index 00000000..f9efc10a --- /dev/null +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/domain/ISort.java @@ -0,0 +1,8 @@ +package com.codingapi.springboot.framework.domain; + +public interface ISort { + + void setSort(Integer sort); + + Integer getSort(); +} diff --git a/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SortRequest.java b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SortRequest.java new file mode 100644 index 00000000..25d5a9b9 --- /dev/null +++ b/springboot-starter/src/main/java/com/codingapi/springboot/framework/dto/request/SortRequest.java @@ -0,0 +1,14 @@ +package com.codingapi.springboot.framework.dto.request; + +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@Setter +@Getter +public class SortRequest { + + private List ids; + +} From 5dbb1da4422017902722affd1d579f8d981425a1 Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Sat, 6 Jan 2024 22:06:44 +0800 Subject: [PATCH 07/10] fix SortRepository --- .../springboot/fast/jpa/repository/SortRepository.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java index 9bbbeb9b..a4e64852 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java @@ -15,12 +15,14 @@ public interface SortRepository extends JpaRepository list = new ArrayList<>(); - int minSort = 0; + int minSort = Integer.MAX_VALUE; for (Object objectId : request.getIds()) { ID id = (ID) objectId; T t = getReferenceById(id); if (t.getSort() != null && t.getSort() < minSort) { minSort = t.getSort(); + }else{ + minSort = 0; } list.add(t); } From d646971d528b3c48f05c4e64dda372b692a9c7eb Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Sat, 6 Jan 2024 22:11:43 +0800 Subject: [PATCH 08/10] fix SortRepository --- .../springboot/fast/jpa/repository/SortRepository.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java index a4e64852..a47a0650 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/SortRepository.java @@ -19,10 +19,12 @@ default void reSort(SortRequest request) { for (Object objectId : request.getIds()) { ID id = (ID) objectId; T t = getReferenceById(id); - if (t.getSort() != null && t.getSort() < minSort) { - minSort = t.getSort(); - }else{ + if (t.getSort() == null) { minSort = 0; + } else { + if (t.getSort() < minSort) { + minSort = t.getSort(); + } } list.add(t); } From fc31115afc074c0903c2a803edee4ecf403574ad Mon Sep 17 00:00:00 2001 From: xlorne <1991wangliang@gmail.com> Date: Wed, 10 Jan 2024 10:49:28 +0800 Subject: [PATCH 09/10] add JPAQuery#pageQuery(Class clazz, String sql, PageRequest pageRequest, Object... params) --- .../java/com/codingapi/springboot/fast/jpa/JPAQuery.java | 5 +++++ .../springboot/fast/jpa/repository/DynamicRepository.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQuery.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQuery.java index 9e0ff15e..1170171b 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQuery.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/JPAQuery.java @@ -24,6 +24,11 @@ public List listQuery(Class clazz, String sql, Object... params) { return query.getResultList(); } + + public Page pageQuery(Class clazz, String sql, PageRequest pageRequest, Object... params) { + return pageQuery(clazz,sql,"select count(1) " + sql,pageRequest,params); + } + public Page pageQuery(Class clazz, String sql, String countSql, PageRequest pageRequest, Object... params) { TypedQuery query = entityManager.createQuery(sql, clazz); if (params != null) { diff --git a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRepository.java b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRepository.java index 186f45a1..924d2e0d 100644 --- a/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRepository.java +++ b/springboot-starter-data-fast/src/main/java/com/codingapi/springboot/fast/jpa/repository/DynamicRepository.java @@ -31,7 +31,7 @@ default Page dynamicPageQuery(String sql, String countSql, PageRequest reques } default Page dynamicPageQuery(String sql, PageRequest request, Object... params) { - return (Page) JpaQueryContext.getInstance().getJPAQuery().pageQuery(getEntityClass(), sql, "select count(1) " + sql, request, params); + return (Page) JpaQueryContext.getInstance().getJPAQuery().pageQuery(getEntityClass(), sql, request, params); } default Page dynamicPageQuery(Class clazz, String sql, String countSql, PageRequest request, Object... params) { From b902e908eb1c8296e656a0ef11c34ce9cc8a0400 Mon Sep 17 00:00:00 2001 From: lorne <1991wangliang@gmail.com> Date: Thu, 11 Jan 2024 11:02:07 +0800 Subject: [PATCH 10/10] update 3.1.9 --- pom.xml | 2 +- springboot-starter-data-fast/pom.xml | 2 +- springboot-starter-security-jwt/pom.xml | 2 +- springboot-starter/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 5e89b3e9..8c42cd10 100644 --- a/pom.xml +++ b/pom.xml @@ -12,7 +12,7 @@ com.codingapi.springboot springboot-parent - 3.1.9.dev + 3.1.9 https://github.com/codingapi/springboot-framewrok springboot-parent diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml index 93d8c382..17764984 100644 --- a/springboot-starter-data-fast/pom.xml +++ b/springboot-starter-data-fast/pom.xml @@ -5,7 +5,7 @@ springboot-parent com.codingapi.springboot - 3.1.9.dev + 3.1.9 4.0.0 diff --git a/springboot-starter-security-jwt/pom.xml b/springboot-starter-security-jwt/pom.xml index 4728dcba..847a8db9 100644 --- a/springboot-starter-security-jwt/pom.xml +++ b/springboot-starter-security-jwt/pom.xml @@ -6,7 +6,7 @@ springboot-parent com.codingapi.springboot - 3.1.9.dev + 3.1.9 springboot-starter-security-jwt diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index d7cdc733..43dfc218 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -5,7 +5,7 @@ com.codingapi.springboot springboot-parent - 3.1.9.dev + 3.1.9 springboot-starter