Browse Source

jdbcTemplateService的listBySql方法增加RowMapper支持

main
likunming 2 months ago
parent
commit
093b719d45
  1. 10
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/JdbcTemplateService.java
  2. 60
      io.sc.platform.lcdp/src/main/java/io/sc/platform/lcdp/form/service/impl/JdbcTemplateServiceImpl.java

10
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.jdbc.sql.condition.Condition;
import io.sc.platform.orm.service.support.QueryParameter; import io.sc.platform.orm.service.support.QueryParameter;
import org.springframework.jdbc.core.RowMapper;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -18,6 +19,15 @@ public interface JdbcTemplateService {
* @throws Exception * @throws Exception
*/ */
public Map<String, Object> listBySql(QueryParameter parameter, String sql, Map<String, Class<?>> fieldTypeMap)throws Exception; public Map<String, Object> listBySql(QueryParameter parameter, String sql, Map<String, Class<?>> fieldTypeMap)throws Exception;
/**
* 根据 QueryParameter SQL 查询数据
* @param parameter
* @param sql
* @param fieldTypeMap 前端查询面板的字段映射的 java 类型
* @return
* @throws Exception
*/
public Map<String, Object> listBySql(QueryParameter parameter, String sql, Map<String, Class<?>> fieldTypeMap, RowMapper<?> rowMapper)throws Exception;
/** /**
* 根据 QueryParameter 与自己组装的带where条件的SQL 查询数据 * 根据 QueryParameter 与自己组装的带where条件的SQL 查询数据
* @param parameter * @param parameter

60
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.beans.factory.annotation.Autowired;
import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.ConversionService;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.jdbc.support.rowset.SqlRowSetMetaData; 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()); 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 @Override
public Map<String, Object> listByConditionSql(QueryParameter parameter, String querySql, Map<String, Object> conditionParamsMap) throws Exception { public Map<String, Object> listByConditionSql(QueryParameter parameter, String querySql, Map<String, Object> conditionParamsMap) throws Exception {
String orderBySql = builderOrderBy(parameter); String orderBySql = builderOrderBy(parameter);
@ -470,6 +505,31 @@ public class JdbcTemplateServiceImpl implements JdbcTemplateService {
return rs; 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 { public String buildQuerySql(GridPageEntity grid, String conditionSql, Condition condition, String orderBySql, QueryParameter parameter) throws Exception {
StringBuffer sql = new StringBuffer(); StringBuffer sql = new StringBuffer();
if (grid.getFieldComeFrom().equals(FieldComeFrom.table)) { if (grid.getFieldComeFrom().equals(FieldComeFrom.table)) {

Loading…
Cancel
Save