Skip to content

Commit 7ea56d8

Browse files
committed
fix #127
1 parent 45d2b5d commit 7ea56d8

File tree

13 files changed

+1200
-7
lines changed

13 files changed

+1200
-7
lines changed

pom.xml

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

1616
<groupId>com.codingapi.springboot</groupId>
1717
<artifactId>springboot-parent</artifactId>
18-
<version>2.10.8</version>
18+
<version>2.10.9</version>
1919

2020
<url>https://github.com/codingapi/springboot-framewrok</url>
2121
<name>springboot-parent</name>

springboot-starter-data-authorization/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>2.10.8</version>
9+
<version>2.10.9</version>
1010
</parent>
1111

1212
<name>springboot-starter-data-authorization</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>2.10.8</version>
8+
<version>2.10.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: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.codingapi.springboot.fast.jpa;
22

3+
import com.codingapi.springboot.fast.jpa.map.MapViewResult;
4+
import com.codingapi.springboot.fast.jpa.map.QueryColumns;
5+
import com.codingapi.springboot.fast.jpa.map.QueryColumnsContext;
36
import lombok.AllArgsConstructor;
47
import org.springframework.data.domain.Page;
58
import org.springframework.data.domain.PageImpl;
@@ -60,4 +63,19 @@ private long countQuery(String sql, Object... params) {
6063
return query.getSingleResult();
6164
}
6265

66+
public Page<MapViewResult> pageMapQuery(QueryColumns columns, String sql, String countSql, PageRequest pageRequest, Object... params) {
67+
String querySql = "select new com.codingapi.springboot.fast.jpa.map.MapViewResult('"+columns.getKey()+"',"+ String.join(",", columns.getColumnSql()) + ") " + sql;
68+
String countQuerySql = "select count(1) " + countSql;
69+
Page<MapViewResult> result = (Page<MapViewResult>) pageQuery(MapViewResult.class,querySql,countQuerySql,pageRequest,params);
70+
QueryColumnsContext.getInstance().clearCache(columns.getKey());
71+
return result;
72+
}
73+
74+
public List<?> listMapQuery(QueryColumns columns, String sql, Object... params) {
75+
String querySql = "select new com.codingapi.springboot.fast.jpa.map.MapViewResult('"+columns.getKey()+"',"+ String.join(",", columns.getColumnSql()) + ") " + sql;
76+
List<?> result = listQuery(MapViewResult.class,querySql,params);
77+
QueryColumnsContext.getInstance().clearCache(columns.getKey());
78+
return result;
79+
}
80+
6381
}

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

Lines changed: 1029 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.codingapi.springboot.fast.jpa.map;
2+
3+
import com.codingapi.springboot.framework.utils.RandomGenerator;
4+
import lombok.Getter;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
9+
@Getter
10+
public class QueryColumns {
11+
private final String key;
12+
private final List<String> columns;
13+
14+
QueryColumns() {
15+
this.key = RandomGenerator.randomString(8);
16+
this.columns = new ArrayList<>();
17+
}
18+
19+
public QueryColumns addColumn(String column) {
20+
this.columns.add(column);
21+
return this;
22+
}
23+
24+
List<String> getColumnAlias(){
25+
List<String> columnAlias = new ArrayList<>();
26+
for (String column : columns) {
27+
if(column.contains("as ") ) {
28+
String[] parts = column.split("as ");
29+
String alias = parts[parts.length - 1];
30+
columnAlias.add(alias.trim());
31+
continue;
32+
}
33+
if(column.contains("AS ") ) {
34+
String[] parts = column.split("AS ");
35+
String alias = parts[parts.length - 1];
36+
columnAlias.add(alias.trim());
37+
continue;
38+
}
39+
if(column.contains(".") ) {
40+
String[] parts = column.split("\\.");
41+
String alias = parts[parts.length - 1];
42+
columnAlias.add(alias.trim());
43+
continue;
44+
}
45+
columnAlias.add(column.trim());
46+
}
47+
return columnAlias;
48+
}
49+
50+
public String getColumnSql() {
51+
return String.join(",", columns);
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.codingapi.springboot.fast.jpa.map;
2+
3+
import lombok.Getter;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
@Getter
9+
public class QueryColumnsContext {
10+
private final Map<String, QueryColumns> cache = new HashMap<>();
11+
@Getter
12+
private final static QueryColumnsContext instance = new QueryColumnsContext();
13+
14+
private QueryColumnsContext() {
15+
16+
}
17+
18+
public static QueryColumns build(String ... columns) {
19+
QueryColumns mapColumn = new QueryColumns();
20+
for (String column : columns) {
21+
mapColumn.addColumn(column);
22+
}
23+
QueryColumnsContext.getInstance().cache.put(mapColumn.getKey(), mapColumn);
24+
return mapColumn;
25+
}
26+
27+
28+
QueryColumns getQueryColumns(String key) {
29+
return this.cache.get(key);
30+
}
31+
32+
public void clearCache(String key) {
33+
this.cache.remove(key);
34+
}
35+
}

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.codingapi.springboot.fast.jpa.JpaQueryContext;
44
import com.codingapi.springboot.fast.jpa.SQLBuilder;
5+
import com.codingapi.springboot.fast.jpa.map.MapViewResult;
6+
import com.codingapi.springboot.fast.jpa.map.QueryColumns;
57
import org.springframework.data.domain.Page;
68
import org.springframework.data.domain.PageRequest;
79
import org.springframework.data.repository.NoRepositoryBean;
@@ -40,4 +42,12 @@ default <V> Page<V> dynamicPageQuery(Class<V> clazz, String sql, String countSql
4042
return (Page<V>) JpaQueryContext.getInstance().getJPAQuery().pageQuery(clazz, sql, countSql, request, params);
4143
}
4244

45+
default Page<MapViewResult> dynamicMapPageQuery(QueryColumns columns, String sql, String countSql, PageRequest request, Object... params) {
46+
return JpaQueryContext.getInstance().getJPAQuery().pageMapQuery(columns, sql, countSql, request, params);
47+
}
48+
49+
default List<MapViewResult> dynamicMapListQuery(QueryColumns columns, String sql, Object... params) {
50+
return (List<MapViewResult>) JpaQueryContext.getInstance().getJPAQuery().listMapQuery(columns, sql, params);
51+
}
52+
4353
}

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.codingapi.springboot.fast.entity.Demo;
44
import com.codingapi.springboot.fast.entity.Profile;
55
import com.codingapi.springboot.fast.entity.User;
6+
import com.codingapi.springboot.fast.jpa.map.MapViewResult;
7+
import com.codingapi.springboot.fast.jpa.map.QueryColumnsContext;
68
import com.codingapi.springboot.fast.repository.DemoRepository;
79
import com.codingapi.springboot.fast.repository.ProfileRepository;
810
import com.codingapi.springboot.fast.repository.UserRepository;
@@ -13,6 +15,8 @@
1315
import org.springframework.boot.test.context.SpringBootTest;
1416
import org.springframework.data.domain.Page;
1517

18+
import java.util.List;
19+
1620
import static org.junit.jupiter.api.Assertions.assertTrue;
1721

1822
@Slf4j
@@ -59,6 +63,50 @@ void test1() {
5963
}
6064

6165

66+
@Test
67+
void testMapQuery() {
68+
69+
Demo demo = new Demo();
70+
demo.setName("123");
71+
demoRepository.save(demo);
72+
73+
74+
Profile profile = new Profile();
75+
profile.setDemo(demo);
76+
profile.setName("123");
77+
profileRepository.save(profile);
78+
79+
80+
User user = new User();
81+
user.setName("li");
82+
user.setProfile(profile);
83+
userRepository.save(user);
84+
85+
assertTrue(demo.getId() > 0);
86+
assertTrue(user.getId() > 0);
87+
88+
PageRequest request = new PageRequest();
89+
request.addFilter("profile.demo.id", 1);
90+
91+
String querySql = "from User u where u.profile.demo.id = ?1";
92+
String countSQL = "from User u where u.profile.demo.id = ?1";
93+
Page<MapViewResult> page =
94+
userRepository.dynamicMapPageQuery(
95+
QueryColumnsContext.build("u.id as iii","u.name"),
96+
querySql,
97+
countSQL, request, 1);
98+
List<MapViewResult> queryMaps = page.getContent();
99+
System.out.println(queryMaps);
100+
101+
List<MapViewResult> list =
102+
userRepository.dynamicMapListQuery(
103+
QueryColumnsContext.build("u.id as iii","u.name"),
104+
querySql,
105+
1);
106+
System.out.println(list);
107+
108+
}
109+
62110

63111
@Test
64112
void test2() {

springboot-starter-flow/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>2.10.8</version>
9+
<version>2.10.9</version>
1010
</parent>
1111

1212
<name>springboot-starter-flow</name>

0 commit comments

Comments
 (0)