Skip to content

Commit 84b5b20

Browse files
committed
add SQLBuilder
1 parent 9810e4e commit 84b5b20

File tree

6 files changed

+98
-21
lines changed

6 files changed

+98
-21
lines changed

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

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

3+
import com.codingapi.springboot.fast.jpa.SQLBuilder;
34
import org.apache.commons.text.CaseUtils;
45
import org.springframework.data.domain.Page;
56
import org.springframework.data.domain.PageImpl;
@@ -37,34 +38,50 @@ public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException
3738
}
3839
}
3940

40-
public List<Map<String, Object>> queryForList(String sql, Object... params) {
41+
public List<Map<String, Object>> queryForMapList(SQLBuilder builder) {
42+
return queryForMapList(builder.getSQL(), builder.getParams());
43+
}
44+
45+
public List<Map<String, Object>> queryForMapList(String sql, Object... params) {
4146
return jdbcTemplate.query(sql, params, new CamelCaseRowMapper());
4247
}
4348

49+
public <T> List<T> queryForList(SQLBuilder builder) {
50+
return (List<T>) queryForList(builder.getSQL(), builder.getClazz(), builder.getParams());
51+
}
52+
4453
public <T> List<T> queryForList(String sql, Class<T> clazz, Object... params) {
4554
return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz));
4655
}
4756

57+
public <T> Page<T> queryForPage(SQLBuilder builder, PageRequest pageRequest) {
58+
return (Page<T>)queryForPage(builder.getSQL(), builder.getCountSQL(), builder.getClazz(), pageRequest, builder.getParams());
59+
}
60+
4861
public <T> Page<T> queryForPage(String sql, String countSql, Class<T> clazz, PageRequest pageRequest, Object... params) {
4962
List<T> list = jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz));
5063
long count = this.countQuery(countSql, params);
5164
return new PageImpl<>(list, pageRequest, count);
5265
}
5366

5467
public <T> Page<T> queryForPage(String sql, Class<T> clazz, PageRequest pageRequest, Object... params) {
55-
String countSql = "select count(1) "+sql;
68+
String countSql = "select count(1) " + sql;
5669
return this.queryForPage(sql, countSql, clazz, pageRequest, params);
5770
}
5871

59-
public Page<Map<String, Object>> queryForPage(String sql, String countSql, PageRequest pageRequest, Object... params) {
72+
public Page<Map<String, Object>> queryForMapPage(SQLBuilder builder, PageRequest pageRequest) {
73+
return queryForMapPage(builder.getSQL(), builder.getCountSQL(), pageRequest, builder.getParams());
74+
}
75+
76+
public Page<Map<String, Object>> queryForMapPage(String sql, String countSql, PageRequest pageRequest, Object... params) {
6077
List<Map<String, Object>> list = jdbcTemplate.query(sql, params, new CamelCaseRowMapper());
6178
long count = this.countQuery(countSql, params);
6279
return new PageImpl<>(list, pageRequest, count);
6380
}
6481

65-
public Page<Map<String, Object>> queryForPage(String sql, PageRequest pageRequest, Object... params) {
66-
String countSql = "select count(1) "+sql;
67-
return this.queryForPage(sql, countSql, pageRequest, params);
82+
public Page<Map<String, Object>> queryForMapPage(String sql, PageRequest pageRequest, Object... params) {
83+
String countSql = "select count(1) " + sql;
84+
return this.queryForMapPage(sql, countSql, pageRequest, params);
6885
}
6986

7087

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ public class JPAQuery {
1414

1515
private final EntityManager entityManager;
1616

17+
public List<?> listQuery(SQLBuilder builder) {
18+
return listQuery(builder.getClazz(),builder.getSQL(),builder.getParams());
19+
}
20+
1721
public List<?> listQuery(Class<?> clazz, String sql, Object... params) {
1822
TypedQuery<?> query = entityManager.createQuery(sql, clazz);
1923
if (params != null) {
@@ -24,6 +28,10 @@ public List<?> listQuery(Class<?> clazz, String sql, Object... params) {
2428
return query.getResultList();
2529
}
2630

31+
public Page<?> pageQuery(SQLBuilder builder,PageRequest pageRequest) {
32+
return pageQuery(builder.getClazz(), builder.getSQL(), builder.getCountSQL(),pageRequest,builder.getParams());
33+
}
34+
2735

2836
public Page<?> pageQuery(Class<?> clazz, String sql, PageRequest pageRequest, Object... params) {
2937
return pageQuery(clazz,sql,"select count(1) " + sql,pageRequest,params);

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.codingapi.springboot.fast.jpa;
22

3+
import lombok.Getter;
4+
35
import java.util.ArrayList;
46
import java.util.List;
57

@@ -9,20 +11,26 @@ public class SQLBuilder {
911
private final StringBuilder countSQLBuilder;
1012
private int index;
1113
private final List<Object> params;
12-
14+
@Getter
15+
private final Class<?> clazz;
1316

1417
public SQLBuilder(String sql) {
15-
this(sql,"select count(1) from "+sql);
18+
this(null, sql, "select count(1) from " + sql);
1619
}
1720

18-
public SQLBuilder(String sql, String countSQL) {
21+
public SQLBuilder(Class<?> clazz, String sql) {
22+
this(clazz, sql, "select count(1) from " + sql);
23+
}
24+
25+
public SQLBuilder(Class<?> clazz, String sql, String countSQL) {
1926
this.countSQLBuilder = new StringBuilder(countSQL);
2027
this.sqlBuilder = new StringBuilder(sql);
2128
this.index = 1;
2229
this.params = new ArrayList<>();
30+
this.clazz = clazz;
2331
}
2432

25-
public void append(String sql,Object value) {
33+
public void append(String sql, Object value) {
2634
if (value != null) {
2735
sqlBuilder.append(" ").append(sql).append(index).append(" ");
2836
countSQLBuilder.append(" ").append(sql).append(index).append(" ");
@@ -31,7 +39,6 @@ public void append(String sql,Object value) {
3139
}
3240
}
3341

34-
3542
public String getSQL() {
3643
return sqlBuilder.toString();
3744
}

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

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

33
import com.codingapi.springboot.fast.jdbc.JdbcQueryContext;
4+
import com.codingapi.springboot.fast.jpa.SQLBuilder;
45
import org.springframework.data.domain.Page;
56
import org.springframework.data.domain.PageRequest;
67
import org.springframework.data.repository.NoRepositoryBean;
@@ -11,8 +12,12 @@
1112
@NoRepositoryBean
1213
public interface DynamicNativeRepository<T, ID> extends BaseRepository<T, ID> {
1314

15+
default List<Map<String, Object>> dynamicNativeListMapQuery(SQLBuilder builder) {
16+
return JdbcQueryContext.getInstance().getJdbcQuery().queryForMapList(builder);
17+
}
18+
1419
default List<Map<String, Object>> dynamicNativeListMapQuery(String sql, Object... params) {
15-
return JdbcQueryContext.getInstance().getJdbcQuery().queryForList(sql, params);
20+
return JdbcQueryContext.getInstance().getJdbcQuery().queryForMapList(sql, params);
1621
}
1722

1823
default List<T> dynamicNativeListQuery(String sql, Object... params) {
@@ -23,6 +28,10 @@ default <V> List<V> dynamicNativeListQuery(Class<V> clazz, String sql, Object...
2328
return JdbcQueryContext.getInstance().getJdbcQuery().queryForList(sql, clazz, params);
2429
}
2530

31+
default <V> List<V> dynamicNativeListQuery(SQLBuilder sqlBuilder) {
32+
return JdbcQueryContext.getInstance().getJdbcQuery().queryForList(sqlBuilder);
33+
}
34+
2635
default Page<T> dynamicNativePageQuery(String sql, String countSql, PageRequest request, Object... params) {
2736
return dynamicNativePageQuery(getEntityClass(), sql, countSql, request, params);
2837
}
@@ -39,12 +48,20 @@ default <V> Page<V> dynamicNativePageQuery(Class<V> clazz, String sql, PageReque
3948
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sql, clazz, request, params);
4049
}
4150

42-
default Page<Map<String, Object>> dynamicNativePageMapQuery(String sql, String countSql, PageRequest request, Object... params) {
43-
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sql, countSql, request, params);
51+
default <V> Page<V> dynamicNativePageQuery(SQLBuilder sqlBuilder, PageRequest request) {
52+
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sqlBuilder, request);
53+
}
54+
55+
default Page<Map<String, Object>> dynamicNativeMapPageMapQuery(SQLBuilder sqlBuilder,PageRequest request) {
56+
return JdbcQueryContext.getInstance().getJdbcQuery().queryForMapPage(sqlBuilder,request);
57+
}
58+
59+
default Page<Map<String, Object>> dynamicNativeMapPageMapQuery(String sql, String countSql, PageRequest request, Object... params) {
60+
return JdbcQueryContext.getInstance().getJdbcQuery().queryForMapPage(sql, countSql, request, params);
4461
}
4562

46-
default Page<Map<String, Object>> dynamicNativePageMapQuery(String sql, PageRequest request, Object... params) {
47-
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sql, request, params);
63+
default Page<Map<String, Object>> dynamicNativeMapPageMapQuery(String sql, PageRequest request, Object... params) {
64+
return JdbcQueryContext.getInstance().getJdbcQuery().queryForMapPage(sql, request, params);
4865
}
4966

5067
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.codingapi.springboot.fast.jpa.repository;
22

33
import com.codingapi.springboot.fast.jpa.JpaQueryContext;
4+
import com.codingapi.springboot.fast.jpa.SQLBuilder;
45
import org.springframework.data.domain.Page;
56
import org.springframework.data.domain.PageRequest;
67
import org.springframework.data.repository.NoRepositoryBean;
@@ -11,6 +12,10 @@
1112
@SuppressWarnings("unchecked")
1213
public interface DynamicRepository<T, ID> extends BaseRepository<T, ID> {
1314

15+
default List<T> dynamicListQuery(SQLBuilder builder) {
16+
return (List<T>) JpaQueryContext.getInstance().getJPAQuery().listQuery(builder);
17+
}
18+
1419
default List<T> dynamicListQuery(String sql, Object... params) {
1520
return (List<T>) JpaQueryContext.getInstance().getJPAQuery().listQuery(getEntityClass(), sql, params);
1621
}
@@ -19,6 +24,10 @@ default <V> List<V> dynamicListQuery(Class<V> clazz, String sql, Object... param
1924
return (List<V>) JpaQueryContext.getInstance().getJPAQuery().listQuery(clazz, sql, params);
2025
}
2126

27+
default Page<T> dynamicPageQuery(SQLBuilder builder, PageRequest request) {
28+
return (Page<T>) JpaQueryContext.getInstance().getJPAQuery().pageQuery(builder, request);
29+
}
30+
2231
default Page<T> dynamicPageQuery(String sql, String countSql, PageRequest request, Object... params) {
2332
return (Page<T>) JpaQueryContext.getInstance().getJPAQuery().pageQuery(getEntityClass(), sql, countSql, request, params);
2433
}

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

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@
88
import com.codingapi.springboot.framework.dto.request.Relation;
99
import lombok.extern.slf4j.Slf4j;
1010
import org.junit.jupiter.api.Test;
11-
import org.junit.platform.commons.util.StringUtils;
1211
import org.springframework.beans.factory.annotation.Autowired;
1312
import org.springframework.boot.test.context.SpringBootTest;
1413
import org.springframework.data.domain.Page;
1514
import org.springframework.data.domain.Sort;
1615

17-
import java.util.ArrayList;
1816
import java.util.List;
1917

2018
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -146,7 +144,28 @@ void dynamicListQuery() {
146144
String search = "12";
147145
builder.append("and name like ?","%"+search+"%");
148146

149-
List<Demo> list = demoRepository.dynamicListQuery(builder.getSQL(), builder.getParams());
147+
List<Demo> list = demoRepository.dynamicListQuery(builder);
148+
assertEquals(1, list.size());
149+
}
150+
151+
152+
153+
@Test
154+
void dynamicNativeListQuery() {
155+
demoRepository.deleteAll();
156+
Demo demo1 = new Demo();
157+
demo1.setName("123");
158+
demoRepository.save(demo1);
159+
160+
Demo demo2 = new Demo();
161+
demo2.setName("456");
162+
demoRepository.save(demo2);
163+
164+
SQLBuilder builder = new SQLBuilder(Demo.class,"select * from t_demo where 1=1");
165+
String search = "12";
166+
builder.append("and name like ?","%"+search+"%");
167+
168+
List<Demo> list = demoRepository.dynamicNativeListQuery(builder);
150169
assertEquals(1, list.size());
151170
}
152171

@@ -162,11 +181,11 @@ void dynamicPageQuery() {
162181
demo2.setName("456");
163182
demoRepository.save(demo2);
164183

165-
SQLBuilder builder = new SQLBuilder("select d from Demo d where 1=1","select count(1) from Demo d where 1=1");
184+
SQLBuilder builder = new SQLBuilder(Demo.class,"select d from Demo d where 1=1","select count(1) from Demo d where 1=1");
166185
String search = "12";
167186
builder.append("and d.name like ?","%"+search+"%");
168187

169-
Page<Demo> page = demoRepository.dynamicPageQuery(builder.getSQL(),builder.getCountSQL(), PageRequest.of(1, 2), builder.getParams());
188+
Page<Demo> page = demoRepository.dynamicPageQuery(builder,PageRequest.of(1, 2));
170189
assertEquals(1, page.getTotalElements());
171190
}
172191

0 commit comments

Comments
 (0)