Skip to content

support SQLBuilder<T> #129

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 1 commit into from
Jul 14, 2025
Merged
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 example/example-app/example-app-cmd-domain/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>example-app</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion example/example-app/example-app-cmd-meta/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>example-app</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion example/example-app/example-app-query/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>example-app</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion example/example-app/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-example</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>
<packaging>pom</packaging>
Expand Down
2 changes: 1 addition & 1 deletion example/example-domain/example-domain-leave/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>example-domain</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion example/example-domain/example-domain-user/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>example-domain</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion example/example-domain/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-example</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
Expand Down
2 changes: 1 addition & 1 deletion example/example-infra/example-infra-flow/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>example-infra</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion example/example-infra/example-infra-jpa/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>example-infra</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion example/example-infra/example-infra-security/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>example-infra</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
2 changes: 1 addition & 1 deletion example/example-infra/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-example</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
<relativePath>../pom.xml</relativePath>
</parent>
<packaging>pom</packaging>
Expand Down
2 changes: 1 addition & 1 deletion example/example-interface/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.codingapi.springboot</groupId>
<artifactId>springboot-example</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>
</parent>

<artifactId>example-interface</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion example/example-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>springboot-example</artifactId>
<groupId>com.codingapi.springboot</groupId>
<version>3.4.9</version>
<version>3.4.10</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
2 changes: 1 addition & 1 deletion example/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
</parent>

<artifactId>springboot-example</artifactId>
<version>3.4.9</version>
<version>3.4.10</version>

<name>springboot-example</name>
<description>springboot-example project for Spring Boot</description>
Expand Down
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.4.9</version>
<version>3.4.10</version>

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

<name>springboot-starter-data-authorization</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.4.9</version>
<version>3.4.10</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,49 +38,49 @@ public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException
}
}

public List<Map<String, Object>> queryForMapList(SQLBuilder builder) {
public List<Map<String, Object>> queryForMapList(SQLBuilder<?> builder) {
return queryForMapList(builder.getSQL(), builder.getParams());
}

public List<Map<String, Object>> queryForMapList(String sql, Object... params) {
return jdbcTemplate.query(sql, params, new CamelCaseRowMapper());
return jdbcTemplate.query(sql, new CamelCaseRowMapper(), params);
}

public <T> List<T> queryForList(SQLBuilder builder) {
return (List<T>) queryForList(builder.getSQL(), builder.getClazz(), builder.getParams());
public <T> List<T> queryForList(SQLBuilder<T> builder) {
return queryForList(builder.getSQL(), builder.getClazz(), builder.getParams());
}

public <T> List<T> queryForList(String sql, Class<T> clazz, Object... params) {
return jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz));
return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(clazz), params);
}

public <T> Page<T> queryForPage(SQLBuilder builder, PageRequest pageRequest) {
return (Page<T>)queryForPage(builder.getSQL(), builder.getCountSQL(), builder.getClazz(), pageRequest, builder.getParams());
public <T> Page<T> queryForPage(SQLBuilder<T> builder, PageRequest pageRequest) {
return queryForPage(builder.getSQL(), builder.getCountSQL(), builder.getClazz(), pageRequest, builder.getParams());
}

public <T> Page<T> queryForPage(String sql, String countSql, Class<T> clazz, PageRequest pageRequest, Object... params) {
List<T> list = jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(clazz));
List<T> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(clazz), params);
long count = this.countQuery(countSql, params);
return new PageImpl<>(list, pageRequest, count);
}

public <T> Page<T> queryForPage(String sql, Class<T> clazz, PageRequest pageRequest, Object... params) {
String countSql = "select count(1) " + sql;
String countSql = "SELECT COUNT(1) " + sql;
return this.queryForPage(sql, countSql, clazz, pageRequest, params);
}

public Page<Map<String, Object>> queryForMapPage(SQLBuilder builder, PageRequest pageRequest) {
public Page<Map<String, Object>> queryForMapPage(SQLBuilder<?> builder, PageRequest pageRequest) {
return queryForMapPage(builder.getSQL(), builder.getCountSQL(), pageRequest, builder.getParams());
}

public Page<Map<String, Object>> queryForMapPage(String sql, String countSql, PageRequest pageRequest, Object... params) {
List<Map<String, Object>> list = jdbcTemplate.query(sql, params, new CamelCaseRowMapper());
List<Map<String, Object>> list = jdbcTemplate.query(sql, new CamelCaseRowMapper(), params);
long count = this.countQuery(countSql, params);
return new PageImpl<>(list, pageRequest, count);
}

public Page<Map<String, Object>> queryForMapPage(String sql, PageRequest pageRequest, Object... params) {
String countSql = "select count(1) " + sql;
String countSql = "SELECT COUNT(1) " + sql;
return this.queryForMapPage(sql, countSql, pageRequest, params);
}

Expand All @@ -92,6 +92,6 @@ private long countQuery(String sql, Object... params) {
if (paramsLength > countSqlParamsLength) {
System.arraycopy(params, 0, newParams, 0, countSqlParamsLength);
}
return jdbcTemplate.queryForObject(sql, newParams, Long.class);
return jdbcTemplate.queryForObject(sql, Long.class, newParams);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ public class JPAQuery {

private final EntityManager entityManager;

public List<?> listQuery(SQLBuilder builder) {
public <T> List<T> listQuery(SQLBuilder<T> builder) {
return listQuery(builder.getClazz(),builder.getSQL(),builder.getParams());
}

public List<?> listQuery(Class<?> clazz, String sql, Object... params) {
TypedQuery<?> query = entityManager.createQuery(sql, clazz);
public <T> List<T> listQuery(Class<T> clazz, String sql, Object... params) {
TypedQuery<T> query = entityManager.createQuery(sql, clazz);
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i + 1, params[i]);
Expand All @@ -31,25 +31,25 @@ public List<?> listQuery(Class<?> clazz, String sql, Object... params) {
return query.getResultList();
}

public Page<?> pageQuery(SQLBuilder builder,PageRequest pageRequest) {
public <T> Page<T> pageQuery(SQLBuilder<T> builder,PageRequest pageRequest) {
return pageQuery(builder.getClazz(), builder.getSQL(), builder.getCountSQL(),pageRequest,builder.getParams());
}


public Page<?> pageQuery(Class<?> clazz, String sql, PageRequest pageRequest, Object... params) {
return pageQuery(clazz,sql,"select count(1) " + sql,pageRequest,params);
public <T> Page<T> pageQuery(Class<T> 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);
public <T> Page<T> pageQuery(Class<T> clazz, String sql, String countSql, PageRequest pageRequest, Object... params) {
TypedQuery<T> query = entityManager.createQuery(sql, clazz);
if (params != null) {
for (int i = 0; i < params.length; i++) {
query.setParameter(i + 1, params[i]);
}
}
query.setFirstResult(pageRequest.getPageNumber() * pageRequest.getPageSize());
query.setMaxResults(pageRequest.getPageSize());
return new PageImpl<>(query.getResultList(), pageRequest, countQuery(countSql, params));
return new PageImpl<T>(query.getResultList(), pageRequest, countQuery(countSql, params));
}


Expand All @@ -64,16 +64,16 @@ private long countQuery(String sql, Object... params) {
}

public Page<MapViewResult> pageMapQuery(QueryColumns columns, String sql, String countSql, PageRequest pageRequest, Object... params) {
String querySql = "select new com.codingapi.springboot.fast.jpa.map.MapViewResult('"+columns.getKey()+"',"+ String.join(",", columns.getColumnSql()) + ") " + sql;
String countQuerySql = "select count(1) " + countSql;
Page<MapViewResult> result = (Page<MapViewResult>) pageQuery(MapViewResult.class,querySql,countQuerySql,pageRequest,params);
String querySql = "SELECT new com.codingapi.springboot.fast.jpa.map.MapViewResult('"+columns.getKey()+"',"+ String.join(",", columns.getColumnSql()) + ") " + sql;
String countQuerySql = "SELECT COUNT(1) " + countSql;
Page<MapViewResult> result = pageQuery(MapViewResult.class,querySql,countQuerySql,pageRequest,params);
QueryColumnsContext.getInstance().clearCache(columns.getKey());
return result;
}

public List<?> listMapQuery(QueryColumns columns, String sql, Object... params) {
String querySql = "select new com.codingapi.springboot.fast.jpa.map.MapViewResult('"+columns.getKey()+"',"+ String.join(",", columns.getColumnSql()) + ") " + sql;
List<?> result = listQuery(MapViewResult.class,querySql,params);
public List<MapViewResult> listMapQuery(QueryColumns columns, String sql, Object... params) {
String querySql = "SELECT new com.codingapi.springboot.fast.jpa.map.MapViewResult('"+columns.getKey()+"',"+ String.join(",", columns.getColumnSql()) + ") " + sql;
List<MapViewResult> result = listQuery(MapViewResult.class,querySql,params);
QueryColumnsContext.getInstance().clearCache(columns.getKey());
return result;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
import java.util.ArrayList;
import java.util.List;

public class SQLBuilder {
public class SQLBuilder<T> {

private final StringBuilder sqlBuilder;
private final StringBuilder querySqlBuilder;
private final StringBuilder countSQLBuilder;
@Getter
private int index;
private final List<Object> params;
@Getter
private final Class<?> clazz;
private final Class<T> clazz;

public SQLBuilder(String sql) {
this(null, sql, "select count(1) from " + sql);
Expand All @@ -23,21 +23,26 @@ public SQLBuilder(String sql,String countSql) {
this(null, sql, countSql);
}

public SQLBuilder(Class<?> clazz, String sql) {
public SQLBuilder(Class<T> clazz, String sql) {
this(clazz, sql, "select count(1) from " + sql);
}

public SQLBuilder(Class<?> clazz, String sql, String countSQL) {
public SQLBuilder(Class<T> clazz, String sql, String countSQL) {
this.countSQLBuilder = new StringBuilder(countSQL);
this.sqlBuilder = new StringBuilder(sql);
this.querySqlBuilder = new StringBuilder(sql);
this.index = 1;
this.params = new ArrayList<>();
this.clazz = clazz;
}

/**
* Append SQL condition with a value.sql end value must be a placeholder (e.g., "?").
* @param sql the SQL condition to append, e.g., "where id = ?"
* @param value the value to bind to the SQL condition
*/
public void append(String sql, Object value) {
if (value != null) {
sqlBuilder.append(" ").append(sql).append(index).append(" ");
querySqlBuilder.append(" ").append(sql).append(index).append(" ");
countSQLBuilder.append(" ").append(sql).append(index).append(" ");
params.add(value);
index++;
Expand All @@ -55,12 +60,12 @@ public void addParam(Object value,int index){
}

public void appendSql(String sql){
sqlBuilder.append(" ").append(sql).append(" ");
querySqlBuilder.append(" ").append(sql).append(" ");
countSQLBuilder.append(" ").append(sql).append(" ");
}

public String getSQL() {
return sqlBuilder.toString();
return querySqlBuilder.toString();
}

public String getCountSQL() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
@NoRepositoryBean
public interface DynamicNativeRepository<T, ID> extends BaseRepository<T, ID> {

default List<Map<String, Object>> dynamicNativeListMapQuery(SQLBuilder builder) {
default List<Map<String, Object>> dynamicNativeListMapQuery(SQLBuilder<?> builder) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForMapList(builder);
}

Expand All @@ -28,7 +28,7 @@ default <V> List<V> dynamicNativeListQuery(Class<V> clazz, String sql, Object...
return JdbcQueryContext.getInstance().getJdbcQuery().queryForList(sql, clazz, params);
}

default <V> List<V> dynamicNativeListQuery(SQLBuilder sqlBuilder) {
default <V> List<V> dynamicNativeListQuery(SQLBuilder<V> sqlBuilder) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForList(sqlBuilder);
}

Expand All @@ -48,11 +48,11 @@ default <V> Page<V> dynamicNativePageQuery(Class<V> clazz, String sql, PageReque
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sql, clazz, request, params);
}

default <V> Page<V> dynamicNativePageQuery(SQLBuilder sqlBuilder, PageRequest request) {
default <V> Page<V> dynamicNativePageQuery(SQLBuilder<V> sqlBuilder, PageRequest request) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForPage(sqlBuilder, request);
}

default Page<Map<String, Object>> dynamicNativeMapPageMapQuery(SQLBuilder sqlBuilder,PageRequest request) {
default Page<Map<String, Object>> dynamicNativeMapPageMapQuery(SQLBuilder<?> sqlBuilder,PageRequest request) {
return JdbcQueryContext.getInstance().getJdbcQuery().queryForMapPage(sqlBuilder,request);
}

Expand Down
Loading