Skip to content

3.x #37

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jan 11, 2024
Merged

3.x #37

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-parent</artifactId>
<version>3.1.8</version>
<version>3.1.9</version>

<url>https://github.com/codingapi/springboot-framewrok</url>
<name>springboot-parent</name>
Expand Down
2 changes: 1 addition & 1 deletion springboot-starter-data-fast/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>springboot-parent</artifactId>
<groupId>com.codingapi.springboot</groupId>
<version>3.1.8</version>
<version>3.1.9</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ default Page<T> dynamicPageQuery(String sql, String countSql, PageRequest reques
}

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

default <V> Page<V> dynamicPageQuery(Class<V> clazz, String sql, String countSql, PageRequest request, Object... params) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,32 @@
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;

private final List<Object> 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()) {
Expand All @@ -50,6 +55,8 @@ public String getHql() {
}
}

log.debug("hql:{}", hql);
log.debug("params:{}", params);
return hql.toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
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;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;

/**
* 更强大的Repository对象
* @param <T>
* @param <ID>
*/
@NoRepositoryBean
public interface FastRepository<T, ID> extends JpaRepository<T, ID>, JpaSpecificationExecutor<T>, DynamicRepository<T, ID> {

default Page<T> findAll(PageRequest request) {
if (request.hasFilter()) {
Class<T> 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);
}
Expand All @@ -30,10 +36,16 @@ default Class<T> getDomainClass() {
default Page<T> pageRequest(PageRequest request) {
if (request.hasFilter()) {
Class<T> 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);
}


default Page<T> searchRequest(SearchRequest request) {
Class<T> clazz = getDomainClass();
return pageRequest(request.toPageRequest(clazz));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
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<T extends ISort, ID> extends JpaRepository<T, ID> {


default void reSort(SortRequest request) {
if (request != null && !request.getIds().isEmpty()) {
List<T> list = new ArrayList<>();
int minSort = Integer.MAX_VALUE;
for (Object objectId : request.getIds()) {
ID id = (ID) objectId;
T t = getReferenceById(id);
if (t.getSort() == null) {
minSort = 0;
} else {
if (t.getSort() < minSort) {
minSort = t.getSort();
}
}
list.add(t);
}
for (T t : list) {
t.setSort(minSort++);
}
saveAll(list);
}
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -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<Demo> page = demoRepository.pageRequest(request);
assertEquals(1, page.getTotalElements());
Expand All @@ -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<Demo> page = demoRepository.pageRequest(request);
log.info("demo:{}", page.getContent());
Expand All @@ -112,7 +112,7 @@ void customOrSearch() {
demoRepository.save(demo2);

PageRequest request = new PageRequest();
request.setCurrent(1);
request.setCurrent(0);
request.setPageSize(10);


Expand Down Expand Up @@ -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());
Expand Down
2 changes: 1 addition & 1 deletion springboot-starter-security-jwt/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<artifactId>springboot-parent</artifactId>
<groupId>com.codingapi.springboot</groupId>
<version>3.1.8</version>
<version>3.1.9</version>
</parent>

<artifactId>springboot-starter-security-jwt</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion springboot-starter/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-parent</artifactId>
<version>3.1.8</version>
<version>3.1.9</version>
</parent>
<artifactId>springboot-starter</artifactId>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.codingapi.springboot.framework.domain;

public interface ISort {

void setSort(Integer sort);

Integer getSort();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -28,43 +28,13 @@ 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) {
}
}


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);
}
Expand All @@ -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() {
Expand Down Expand Up @@ -164,7 +125,11 @@ public void addSort(Sort sort) {
}
}

public PageRequest andFilter(String key, Relation relation, Object... value) {
public void removeFilter(String key) {
requestFilter.removeFilter(key);
}

public PageRequest addFilter(String key, Relation relation, Object... value) {
requestFilter.addFilter(key, relation, value);
return this;
}
Expand All @@ -174,8 +139,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;
}

Expand Down
Loading