Skip to content

Commit ed49e42

Browse files
committed
fix PageRequest.java
1 parent 3d2742a commit ed49e42

File tree

7 files changed

+285
-28
lines changed

7 files changed

+285
-28
lines changed

docs/wiki/springboot-starter-data-fast.md

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ springboot-starter-data-fast
22

33
基于JPA的快速API能力服务
44

5+
## FastController 快速API能力服务
56
```java
67
package com.codingapi.springboot.example.query;
78

@@ -45,3 +46,161 @@ value为查询语句,countQuery为查询总数语句,query为查询参数,
4546
MultiResponse为返回结果
4647
@PreAuthorize(value = "hasRole('ROLE_USER')") 用于标记当前接口的权限,如果不需要权限可以不用添加
4748

49+
## FastRepository 的使用教程
50+
51+
52+
继承FastRepository接口,实现自定义的接口,即可使用FastRepository的能力
53+
```java
54+
55+
56+
import com.codingapi.springboot.fast.entity.Demo;
57+
import com.codingapi.springboot.fast.query.FastRepository;
58+
59+
public interface DemoRepository extends FastRepository<Demo,Integer> {
60+
61+
}
62+
63+
64+
```
65+
动态FastRepository的能力展示
66+
67+
```java
68+
69+
// 重写findAll,通过Example查询
70+
@Test
71+
void findAll() {
72+
demoRepository.deleteAll();
73+
Demo demo1 = new Demo();
74+
demo1.setName("123");
75+
demoRepository.save(demo1);
76+
77+
Demo demo2 = new Demo();
78+
demo2.setName("456");
79+
demoRepository.save(demo2);
80+
81+
PageRequest request = new PageRequest();
82+
request.setCurrent(1);
83+
request.setPageSize(10);
84+
request.addFilter("name", "123");
85+
86+
Page<Demo> page = demoRepository.findAll(request);
87+
assertEquals(1, page.getTotalElements());
88+
}
89+
90+
91+
// pageRequest 自定义条件查询
92+
@Test
93+
void pageRequest() {
94+
demoRepository.deleteAll();
95+
Demo demo1 = new Demo();
96+
demo1.setName("123");
97+
demoRepository.save(demo1);
98+
99+
Demo demo2 = new Demo();
100+
demo2.setName("456");
101+
demoRepository.save(demo2);
102+
103+
PageRequest request = new PageRequest();
104+
request.setCurrent(1);
105+
request.setPageSize(10);
106+
request.addFilter("name", PageRequest.FilterRelation.LIKE, "%2%");
107+
108+
Page<Demo> page = demoRepository.pageRequest(request);
109+
assertEquals(1, page.getTotalElements());
110+
}
111+
112+
113+
// 动态sql的List查询
114+
@Test
115+
void dynamicListQuery() {
116+
demoRepository.deleteAll();
117+
Demo demo1 = new Demo();
118+
demo1.setName("123");
119+
demoRepository.save(demo1);
120+
121+
Demo demo2 = new Demo();
122+
demo2.setName("456");
123+
demoRepository.save(demo2);
124+
125+
List<Demo> list = demoRepository.dynamicListQuery("from Demo where name = ?1", "123");
126+
assertEquals(1, list.size());
127+
}
128+
129+
130+
// 动态sql的分页查询
131+
@Test
132+
void dynamicPageQuery() {
133+
demoRepository.deleteAll();
134+
Demo demo1 = new Demo();
135+
demo1.setName("123");
136+
demoRepository.save(demo1);
137+
138+
Demo demo2 = new Demo();
139+
demo2.setName("456");
140+
demoRepository.save(demo2);
141+
142+
Page<Demo> page = demoRepository.dynamicPageQuery("from Demo where name = ?1", PageRequest.of(1, 2), "123");
143+
assertEquals(1, page.getTotalElements());
144+
}
145+
146+
// 增加排序查询
147+
@Test
148+
void sortQuery() {
149+
demoRepository.deleteAll();
150+
Demo demo1 = new Demo();
151+
demo1.setName("123");
152+
demoRepository.save(demo1);
153+
154+
Demo demo2 = new Demo();
155+
demo2.setName("456");
156+
demoRepository.save(demo2);
157+
158+
PageRequest request = new PageRequest();
159+
request.setCurrent(1);
160+
request.setPageSize(10);
161+
162+
request.addSort(Sort.by("id").descending());
163+
Page<Demo> page = demoRepository.findAll(request);
164+
assertEquals(page.getContent().get(0).getName(), "456");
165+
assertEquals(2, page.getTotalElements());
166+
}
167+
168+
```
169+
## SortRepository的使用教程
170+
171+
```java
172+
173+
public interface DemoRepository extends FastRepository<Demo,Integer>, SortRepository<Demo,Integer> {
174+
175+
}
176+
177+
```
178+
179+
SortRepository的能力展示
180+
181+
```java
182+
183+
@Test
184+
@Transactional
185+
void pageSort() {
186+
demoRepository.deleteAll();
187+
Demo demo1 = new Demo();
188+
demo1.setName("123");
189+
demoRepository.save(demo1);
190+
191+
Demo demo2 = new Demo();
192+
demo2.setName("456");
193+
demoRepository.save(demo2);
194+
195+
List<Integer> ids = Arrays.asList(demo1.getId(), demo2.getId());
196+
System.out.println(ids);
197+
demoRepository.pageSort(PageRequest.of(1, 10), ids);
198+
199+
Demo newDemo1 = demoRepository.getReferenceById(demo1.getId());
200+
Demo newDemo2 = demoRepository.getReferenceById(demo2.getId());
201+
202+
assertEquals(newDemo2.getSort(), 1);
203+
assertEquals(newDemo1.getSort(), 0);
204+
}
205+
206+
```

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ default Class<T> getDomainClass() {
3333
}
3434

3535

36-
default Page<T> findAllByRequest(PageRequest request) {
36+
default Page<T> pageRequest(PageRequest request) {
3737
if (request.hasFilter()) {
3838
Class<T> clazz = getDomainClass();
3939
Specification<T> specification = (root, query, criteriaBuilder) -> {
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
package com.codingapi.springboot.fast.sort;
22

3-
import org.springframework.data.domain.PageRequest;
3+
import com.codingapi.springboot.framework.dto.request.PageRequest;
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.data.repository.NoRepositoryBean;
66

7+
import java.util.ArrayList;
78
import java.util.List;
89

910
@NoRepositoryBean
10-
public interface SortRepository<T extends ISort, I> extends JpaRepository<T, I> {
11+
public interface SortRepository<T extends ISort, ID> extends JpaRepository<T, ID> {
1112

1213

13-
default void sort(PageRequest request, List<Integer> ids) {
14+
default void pageSort(PageRequest request, List<ID> ids) {
15+
List<T> list = new ArrayList<>();
1416
for (int i = 0; i < ids.size(); i++) {
15-
ISort entity = getById((I) ids.get(i));
16-
entity.setSort(i + ((request.getPageNumber() - 1) * request.getPageSize()));
17-
save((T) entity);
17+
ISort entity = getReferenceById(ids.get(i));
18+
entity.setSort(i + (request.getPageNumber() * request.getPageSize()));
19+
list.add((T) entity);
1820
}
21+
saveAll(list);
1922
}
2023

2124
}

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

Lines changed: 89 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
import org.springframework.boot.test.context.SpringBootTest;
99
import org.springframework.data.domain.Page;
1010
import org.springframework.data.domain.Sort;
11+
import org.springframework.transaction.annotation.Transactional;
12+
13+
import java.util.Arrays;
14+
import java.util.List;
1115

1216
import static org.junit.jupiter.api.Assertions.assertEquals;
1317
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -20,17 +24,17 @@ public class DemoRepositoryTest {
2024

2125

2226
@Test
23-
void test(){
27+
void test() {
2428
demoRepository.deleteAll();
2529
Demo demo = new Demo();
2630
demo.setName("123");
2731
demoRepository.save(demo);
28-
assertTrue(demo.getId()>0);
32+
assertTrue(demo.getId() > 0);
2933
}
3034

3135

3236
@Test
33-
void query(){
37+
void findAll() {
3438
demoRepository.deleteAll();
3539
Demo demo1 = new Demo();
3640
demo1.setName("123");
@@ -43,15 +47,68 @@ void query(){
4347
PageRequest request = new PageRequest();
4448
request.setCurrent(1);
4549
request.setPageSize(10);
46-
request.addFilter("name","123");
50+
request.addFilter("name", "123");
4751

48-
Page<Demo> page = demoRepository.findAll(request);
52+
Page<Demo> page = demoRepository.findAll(request);
4953
assertEquals(1, page.getTotalElements());
5054
}
5155

5256

5357
@Test
54-
void sort(){
58+
void pageRequest() {
59+
demoRepository.deleteAll();
60+
Demo demo1 = new Demo();
61+
demo1.setName("123");
62+
demoRepository.save(demo1);
63+
64+
Demo demo2 = new Demo();
65+
demo2.setName("456");
66+
demoRepository.save(demo2);
67+
68+
PageRequest request = new PageRequest();
69+
request.setCurrent(1);
70+
request.setPageSize(10);
71+
request.addFilter("name", PageRequest.FilterRelation.LIKE, "%2%");
72+
73+
Page<Demo> page = demoRepository.pageRequest(request);
74+
assertEquals(1, page.getTotalElements());
75+
}
76+
77+
78+
@Test
79+
void dynamicListQuery() {
80+
demoRepository.deleteAll();
81+
Demo demo1 = new Demo();
82+
demo1.setName("123");
83+
demoRepository.save(demo1);
84+
85+
Demo demo2 = new Demo();
86+
demo2.setName("456");
87+
demoRepository.save(demo2);
88+
89+
List<Demo> list = demoRepository.dynamicListQuery("from Demo where name = ?1", "123");
90+
assertEquals(1, list.size());
91+
}
92+
93+
94+
@Test
95+
void dynamicPageQuery() {
96+
demoRepository.deleteAll();
97+
Demo demo1 = new Demo();
98+
demo1.setName("123");
99+
demoRepository.save(demo1);
100+
101+
Demo demo2 = new Demo();
102+
demo2.setName("456");
103+
demoRepository.save(demo2);
104+
105+
Page<Demo> page = demoRepository.dynamicPageQuery("from Demo where name = ?1", PageRequest.of(1, 2), "123");
106+
assertEquals(1, page.getTotalElements());
107+
}
108+
109+
110+
@Test
111+
void sortQuery() {
55112
demoRepository.deleteAll();
56113
Demo demo1 = new Demo();
57114
demo1.setName("123");
@@ -66,8 +123,32 @@ void sort(){
66123
request.setPageSize(10);
67124

68125
request.addSort(Sort.by("id").descending());
69-
Page<Demo> page = demoRepository.findAll(request);
70-
assertEquals(page.getContent().get(0).getName(),"456");
126+
Page<Demo> page = demoRepository.findAll(request);
127+
assertEquals(page.getContent().get(0).getName(), "456");
71128
assertEquals(2, page.getTotalElements());
72129
}
130+
131+
132+
@Test
133+
@Transactional
134+
void pageSort() {
135+
demoRepository.deleteAll();
136+
Demo demo1 = new Demo();
137+
demo1.setName("123");
138+
demoRepository.save(demo1);
139+
140+
Demo demo2 = new Demo();
141+
demo2.setName("456");
142+
demoRepository.save(demo2);
143+
144+
List<Integer> ids = Arrays.asList(demo1.getId(), demo2.getId());
145+
System.out.println(ids);
146+
demoRepository.pageSort(PageRequest.of(1, 10), ids);
147+
148+
Demo newDemo1 = demoRepository.getReferenceById(demo1.getId());
149+
Demo newDemo2 = demoRepository.getReferenceById(demo2.getId());
150+
151+
assertEquals(newDemo2.getSort(), 1);
152+
assertEquals(newDemo1.getSort(), 0);
153+
}
73154
}

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codingapi.springboot.fast.entity;
22

3+
import com.codingapi.springboot.fast.sort.ISort;
34
import lombok.Getter;
45
import lombok.Setter;
56

@@ -10,10 +11,13 @@
1011
@Getter
1112
@Entity
1213
@Table(name = "t_demo")
13-
public class Demo {
14+
public class Demo implements ISort {
15+
1416
@Id
1517
@GeneratedValue(strategy = GenerationType.IDENTITY)
1618
private Integer id;
1719

1820
private String name;
21+
22+
private Integer sort;
1923
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import com.codingapi.springboot.fast.entity.Demo;
44
import com.codingapi.springboot.fast.query.FastRepository;
5+
import com.codingapi.springboot.fast.sort.SortRepository;
56

6-
public interface DemoRepository extends FastRepository<Demo,Integer> {
7+
public interface DemoRepository extends FastRepository<Demo,Integer>, SortRepository<Demo,Integer> {
78

89
}

0 commit comments

Comments
 (0)