diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java index 0808d44d..a873e230 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java @@ -2,6 +2,7 @@ package io.sc.platform.lcdp.form.service; import io.sc.platform.jdbc.sql.condition.Condition; import io.sc.platform.orm.service.support.QueryParameter; +import org.springframework.jdbc.core.RowMapper; import java.util.List; import java.util.Map; @@ -18,6 +19,15 @@ public interface JdbcTemplateService { * @throws Exception */ public Map listBySql(QueryParameter parameter, String sql, Map> fieldTypeMap)throws Exception; + /** + * 根据 QueryParameter 与 SQL 查询数据 + * @param parameter + * @param sql + * @param fieldTypeMap 前端查询面板的字段映射的 java 类型 + * @return + * @throws Exception + */ + public Map listBySql(QueryParameter parameter, String sql, Map> fieldTypeMap, RowMapper rowMapper)throws Exception; /** * 根据 QueryParameter 与 与自己组装的带where条件的SQL 查询数据 * @param parameter diff --git a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java index 6d11305e..0a71e0d2 100644 --- a/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java +++ b/io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java @@ -26,6 +26,7 @@ import io.sc.platform.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.convert.ConversionService; import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; @@ -416,6 +417,40 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService { return pageData(list, parameter.getPage(), parameter.getSize(), list.size()); } + @Override + public Map listBySql(QueryParameter parameter, String querySql, Map> fieldTypeMap, RowMapper rowMapper) throws Exception { + Map paramsMap = new HashMap(); + Condition condition = buildCondition(fieldTypeMap, parameter); + String conditionSql = " where 1=1 "; + if (null!=condition.getWhere() && !"".equals(condition.getWhere())) { + conditionSql += " and " + condition.getWhere(); + } + paramsMap = condition.getParameters(); + String orderBySql = builderOrderBy(parameter); + + StringBuffer sql = new StringBuffer(); + sql.append(querySql); + sql.append(conditionSql); + sql.append(orderBySql); + + List list = new ArrayList<>(); + if (!parameter.getPageable()) { + list = namedParameterJdbcTemplate.query(sql.toString(), paramsMap, rowMapper); + } else if (DatabaseType.MYSQL.getProductName().equals(getDatabaseProductName())) { + String pageSql = MySqlBuilder.sqlPage(sql.toString(), parameter.getPage(), parameter.getSize()); + list = namedParameterJdbcTemplate.query(pageSql, paramsMap, rowMapper); + Integer totalCount = namedParameterJdbcTemplate.queryForObject(MySqlBuilder.sqlCount(sql.toString()), paramsMap, Integer.class); + return rowMapperPageData(list, parameter.getPage(), parameter.getSize(), totalCount); + } else { + // 默认使用 Oracle 分页 + String pageSql = OracleBuilder.sqlPage(sql.toString(), parameter.getPage(), parameter.getSize()); + list = namedParameterJdbcTemplate.query(pageSql, paramsMap, rowMapper); + Integer totalCount = namedParameterJdbcTemplate.queryForObject(OracleBuilder.sqlCount(sql.toString()), paramsMap, Integer.class); + return rowMapperPageData(list, parameter.getPage(), parameter.getSize(), totalCount); + } + return rowMapperPageData(list, parameter.getPage(), parameter.getSize(), list.size()); + } + @Override public Map listByConditionSql(QueryParameter parameter, String querySql, Map conditionParamsMap) throws Exception { String orderBySql = builderOrderBy(parameter); @@ -470,6 +505,31 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService { return rs; } + /** + * 组装分页数据 + * @param list 数据集 + * @param pageIndex 当前页 + * @param pageSize 每页大小 + * @param allCount 总记录数 + * @return 返回的Map: + * size=每页大小 + * totalElements=总记录数 + * number=当前页 + * data=数据集 + */ + public static Map rowMapperPageData(List list, Integer pageIndex, Integer pageSize, Integer allCount) { + Map rs = new HashMap(); + rs.put("content", list); + rs.put("size", pageSize); + rs.put("totalElements", allCount.longValue()); + if (null != pageIndex) { + rs.put("number", pageIndex.longValue()); + } else { + rs.put("number", 1); + } + return rs; + } + public String buildQuerySql(GridPageEntity grid, String conditionSql, Condition condition, String orderBySql, QueryParameter parameter) throws Exception { StringBuffer sql = new StringBuffer(); if (grid.getFieldComeFrom().equals(FieldComeFrom.table)) {