Skip to content

Commit 3870d57

Browse files
committed
add DynamicMappingRegister
1 parent 61243e5 commit 3870d57

File tree

9 files changed

+216
-6
lines changed

9 files changed

+216
-6
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.6</version>
15+
<version>3.1.7.dev</version>
1616

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

springboot-starter-data-fast/pom.xml

Lines changed: 7 additions & 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.6</version>
8+
<version>3.1.7.dev</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

@@ -39,6 +39,12 @@
3939
<scope>test</scope>
4040
</dependency>
4141

42+
<dependency>
43+
<groupId>org.apache.commons</groupId>
44+
<artifactId>commons-text</artifactId>
45+
<version>1.11.0</version>
46+
</dependency>
47+
4248
</dependencies>
4349

4450
</project>

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package com.codingapi.springboot.fast;
22

3+
import com.codingapi.springboot.fast.dynamic.DynamicQuery;
34
import com.codingapi.springboot.fast.executor.JpaExecutor;
45
import com.codingapi.springboot.fast.manager.EntityManagerInitializer;
6+
import com.codingapi.springboot.fast.mapping.DynamicMappingRegister;
57
import com.codingapi.springboot.fast.mapping.MvcEndpointMapping;
68
import com.codingapi.springboot.fast.registrar.MvcMappingRegistrar;
79
import org.springframework.aop.Advisor;
810
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
911
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1012
import org.springframework.context.annotation.Bean;
1113
import org.springframework.context.annotation.Configuration;
14+
import org.springframework.jdbc.core.JdbcTemplate;
1215
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
1316
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
1417

@@ -26,6 +29,13 @@ public MvcEndpointMapping mvcEndpointMapping(RequestMappingHandlerMapping handle
2629
return new MvcEndpointMapping(handlerMapping);
2730
}
2831

32+
@Bean
33+
@ConditionalOnMissingBean
34+
public DynamicMappingRegister dynamicMapping(MvcEndpointMapping mvcEndpointMapping, DynamicQuery dynamicQuery, JdbcTemplate jdbcTemplate) {
35+
return new DynamicMappingRegister(mvcEndpointMapping, dynamicQuery, jdbcTemplate);
36+
}
37+
38+
2939
@Bean(initMethod = "registerMvcMapping")
3040
@ConditionalOnMissingBean
3141
public MvcMappingRegistrar mappingRegistrar(MvcEndpointMapping mvcEndpointMapping,
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.codingapi.springboot.fast.mapping;
2+
3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
import lombok.Setter;
6+
import org.springframework.web.bind.annotation.RequestMethod;
7+
8+
@Getter
9+
@Setter
10+
@NoArgsConstructor
11+
public class DynamicMapping {
12+
13+
private String mapping;
14+
private RequestMethod requestMethod;
15+
private String sql;
16+
private Class<?> clazz;
17+
private Object[] params;
18+
private Type type;
19+
20+
public DynamicMapping(Type type, String mapping, RequestMethod requestMethod, String sql, Class<?> clazz, Object... params) {
21+
this.type = type;
22+
this.mapping = mapping;
23+
this.requestMethod = requestMethod;
24+
this.sql = sql;
25+
this.clazz = clazz;
26+
this.params = params;
27+
}
28+
29+
30+
public static DynamicMapping jdbcMapping(String mapping, RequestMethod requestMethod, String sql, Class<?> clazz, Object... params) {
31+
return new DynamicMapping(Type.JDBC, mapping, requestMethod, sql, clazz, params);
32+
}
33+
34+
public static DynamicMapping jdbcMapMapping(String mapping, RequestMethod requestMethod, String sql, Object... params) {
35+
return new DynamicMapping(Type.JDBC_MAP, mapping, requestMethod, sql, null, params);
36+
}
37+
38+
public static DynamicMapping hqlMapping(String mapping, RequestMethod requestMethod, String sql, Class<?> clazz, Object... params) {
39+
return new DynamicMapping(Type.HQL, mapping, requestMethod, sql, clazz, params);
40+
}
41+
42+
43+
44+
enum Type {
45+
JDBC, HQL, JDBC_MAP
46+
}
47+
48+
}
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
package com.codingapi.springboot.fast.mapping;
2+
3+
import com.codingapi.springboot.fast.dynamic.DynamicQuery;
4+
import lombok.AllArgsConstructor;
5+
import lombok.SneakyThrows;
6+
import org.apache.commons.text.CaseUtils;
7+
import org.springframework.jdbc.core.BeanPropertyRowMapper;
8+
import org.springframework.jdbc.core.JdbcTemplate;
9+
import org.springframework.jdbc.core.RowMapper;
10+
import org.springframework.web.bind.annotation.RequestMethod;
11+
import org.springframework.web.bind.annotation.ResponseBody;
12+
13+
import java.lang.reflect.Method;
14+
import java.sql.ResultSet;
15+
import java.sql.ResultSetMetaData;
16+
import java.sql.SQLException;
17+
import java.util.HashMap;
18+
import java.util.List;
19+
import java.util.Map;
20+
21+
@AllArgsConstructor
22+
public class DynamicMappingRegister {
23+
24+
private final MvcEndpointMapping mvcEndpointMapping;
25+
26+
private final DynamicQuery dynamicQuery;
27+
28+
private final JdbcTemplate jdbcTemplate;
29+
30+
31+
private void addJdbcMapping(String mapping, RequestMethod requestMethod,String sql,Class<?> clazz, Object ... params) {
32+
Object handler = new JdbcMapping( jdbcTemplate,sql,clazz,params);
33+
Method method = getJdbcMethod();
34+
mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method);
35+
}
36+
37+
38+
private void addJdbcMapping(String mapping, RequestMethod requestMethod,String sql, Object ... params) {
39+
Object handler = new JdbcMapMapping( jdbcTemplate,sql,params);
40+
Method method = getJdbcMapMethod();
41+
mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method);
42+
}
43+
44+
45+
private void addHqlMapping(String mapping, RequestMethod requestMethod,String hql,Class<?> clazz, Object ... params) {
46+
Object handler = new HqlMapping(dynamicQuery,hql,clazz,params);
47+
Method method = getHqlMethod();
48+
mvcEndpointMapping.addMapping(mapping, requestMethod, handler, method);
49+
}
50+
51+
public void addMapping(DynamicMapping dynamicMapping) {
52+
switch (dynamicMapping.getType()) {
53+
case JDBC:
54+
addJdbcMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams());
55+
break;
56+
case HQL:
57+
addHqlMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getClazz(), dynamicMapping.getParams());
58+
break;
59+
case JDBC_MAP:
60+
addJdbcMapping(dynamicMapping.getMapping(), dynamicMapping.getRequestMethod(), dynamicMapping.getSql(), dynamicMapping.getParams());
61+
break;
62+
default:
63+
throw new RuntimeException("not support type");
64+
}
65+
}
66+
67+
68+
69+
@SneakyThrows
70+
private Method getJdbcMethod(){
71+
return JdbcMapping.class.getDeclaredMethod("execute");
72+
}
73+
74+
@SneakyThrows
75+
private Method getJdbcMapMethod(){
76+
return JdbcMapMapping.class.getDeclaredMethod("execute");
77+
}
78+
79+
@SneakyThrows
80+
private Method getHqlMethod(){
81+
return HqlMapping.class.getDeclaredMethod("execute");
82+
}
83+
84+
85+
@AllArgsConstructor
86+
public static class JdbcMapMapping{
87+
88+
private final JdbcTemplate jdbcTemplate;
89+
private final String sql;
90+
private final Object[] params;
91+
92+
@ResponseBody
93+
public List<Map<String,Object>> execute() {
94+
return jdbcTemplate.query(sql, params, new CamelCaseRowMapper());
95+
}
96+
97+
private static class CamelCaseRowMapper implements RowMapper<Map<String, Object>> {
98+
99+
@Override
100+
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
101+
ResultSetMetaData metaData = rs.getMetaData();
102+
int columnCount = metaData.getColumnCount();
103+
Map<String, Object> map = new HashMap<>(columnCount);
104+
for (int i = 1; i <= columnCount; i++) {
105+
String columnName = metaData.getColumnLabel(i);
106+
map.put(CaseUtils.toCamelCase(columnName,false), rs.getObject(i));
107+
}
108+
return map;
109+
}
110+
}
111+
}
112+
113+
114+
@AllArgsConstructor
115+
public static class JdbcMapping{
116+
117+
private final JdbcTemplate jdbcTemplate;
118+
private final String sql;
119+
private final Class<?> clazz;
120+
private final Object[] params;
121+
122+
@ResponseBody
123+
public List<?> execute() {
124+
return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz));
125+
}
126+
127+
128+
129+
}
130+
131+
132+
@AllArgsConstructor
133+
public static class HqlMapping{
134+
135+
private final DynamicQuery dynamicQuery;
136+
private final String hql;
137+
private final Class<?> clazz;
138+
private final Object[] params;
139+
140+
@ResponseBody
141+
public List<?> execute() {
142+
return dynamicQuery.listQuery(clazz,hql, params);
143+
}
144+
}
145+
146+
}

springboot-starter-id-generator/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.6</version>
8+
<version>3.1.7.dev</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

springboot-starter-persistence/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.6</version>
8+
<version>3.1.7.dev</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111

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.6</version>
9+
<version>3.1.7.dev</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.6</version>
8+
<version>3.1.7.dev</version>
99
</parent>
1010
<artifactId>springboot-starter</artifactId>
1111

0 commit comments

Comments
 (0)