分享知识 传递快乐
使用递归的方式查询所有满足条件的数据,前提是每次查询时需要返回数据总数量才能计算出是否要继续递归。思路如下:
/**
* 查询数据列表
*
* @param sql SQL语句
* @param pageSize 每页显示数量
* @return executeSqlQuery
*/
public <T> List<T> executeSqlQuery(String sql, Integer pageSize) {
return this.recursivePaging(sql, tableName, 1, 0, pageSize, null);
}
/**
* 递归分页查询
*
* @param sql 查询SQL
* @param currentPage 当前页
* @param pageNum 条数
* @param pageSize 每页条数
* @param list 数据集合
* @return
*/
private <T> List<T> recursivePaging(String sql, Integer currentPage, Integer pageNum, Integer pageSize, List<T> list) {
list = (list == null) ? new ArrayList<T>() : list;
String formatSql = StrUtil.format("{} LIMIT {}, {}", sql, pageNum, pageSize);
try {
log.info("执行SQL:{}", formatSql);
String data = HttpRequest.post(ConfigConstants.QUERY_URL)
.header("Authorization", Util.getToken())
.body(formatSql)
.execute()
.body();
log.info("请求查询数据列表返回结果:>>>> " + data);
ResultSetDTO<T> resultSetDTO = JSONUtil.toBean(data, ResultSetDTO.class);
if (resultSetDTO == null || StrUtil.isNotBlank(resultSetDTO.getError_code()) || resultSetDTO.getTotalSize() == null) {
log.error("递归SQL查询返回结果异常:{}", JSONUtil.toJsonStr(resultSetDTO));
throw new BusinessException(JSONUtil.toJsonStr(resultSetDTO));
}
// 计算总页数
long totalPages = (resultSetDTO.getTotalSize() - 1) / pageSize + 1;
list.addAll(resultSetDTO.getRecords());
log.info("当前页数:{},总页数:{}, 当前查询条数:{},已查询条数:{}", currentPage, totalPages, resultSetDTO.getCount(), list.size());
if ((totalPages - currentPage) > 0) {
recursivePaging(sql, (currentPage + 1), (currentPage * pageSize), pageSize, list);
}
} catch (Exception e) {
log.error("递归SQL查询异常", e);
throw new BusinessException("递归SQL查询异常", e);
}
return list;
}
—————————
如有不足请留言指正
相互学习,共同进步