Я использую Spring JDB C в своем проекте для выполнения sql операторов и обработки результатов. И я столкнулся с небольшой проблемой. Я обрабатываю все запросы в моем сервисе и sql запрос и параметры для него я получаю в «реальном времени». Я ничего не знаю о схеме или таблице в запросе ранее - только в режиме реального времени. И мой сервис должен возвращать значения и параметры для разбивки на страницы, особенно размер (количество строк без ограничений). Это сработало идеально некоторое время.
Я выполняю запрос так:
@Transactional(readOnly = true)
private List<Map<String, Object>> executeAndGetResult(String queryForExecute,
MapSqlParameterSource mapSqlParameterSource,
ReportRequest reportRequest) {
reportResultMapper.setQuery(queryForExecute);
reportResultMapper.setReportRequest(reportRequest);
return jdbcTemplate.query(queryForExecute, mapSqlParameterSource, reportResultMapper);
}
И после этого подсчитываю строки для разбивки на страницы вот так:
@Transactional(readOnly = true)
private int getCountOfRows(String templateQuery, MapSqlParameterSource mapSqlParameterSource) {
var countOfRows = jdbcTemplate.queryForObject(
"select count(id) " + templateQuery.substring(templateQuery.indexOf("from")),
mapSqlParameterSource,
Integer.TYPE);
if (countOfRows != null) return countOfRows;
return 0;
}
Но, как я уже сказал, это было хорошо в прошлое. Если я должен обработать большой запрос - мой анализ здесь отстой. Я хочу знать - есть ли способ подсчитать все строки без выполнения запроса со всеми столбцами? Нечто подобное я сделал в getCountRows, используя Spring JDB C, но более декларативный idk.