Подсчет строк с использованием Spring JDBC - PullRequest
0 голосов
/ 17 апреля 2020

Я использую 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.

...