|
|
@ -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<String, Object> listBySql(QueryParameter parameter, String querySql, Map<String, Class<?>> fieldTypeMap, RowMapper<?> rowMapper) throws Exception { |
|
|
|
Map<String, Object> paramsMap = new HashMap<String, Object>(); |
|
|
|
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<String, Object> listByConditionSql(QueryParameter parameter, String querySql, Map<String, Object> 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<String, Object> rowMapperPageData(List list, Integer pageIndex, Integer pageSize, Integer allCount) { |
|
|
|
Map<String, Object> rs = new HashMap<String, Object>(); |
|
|
|
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)) { |
|
|
|