Как получить только целые значения из таблицы SQL с помощью Spring Boot?

Мне нужно только значение из столбца целочисленного типа.

У меня есть этот код здесь:

В контроллере:

@GetMapping("/rating/{id}")
Rating findRating(@PathVariable Integer id) {
    Optional<Rating> rating = runRepository.findRating(id);
    System.out.println("rating is -------"+rating.get());
    return rating.get();
}

В репозитории:

public Optional<Rating> findRating(Integer id) {
    return jdbcClient.sql
            ("select rating from movie where id = :id")
            .param("id", id).query(Rating.class).optional();
}

Выход:

rating is -------Rating[rating=9.0]

Проблема с этим кодом в том, что мне придется обрезать это значение, а затем я смогу поиграть (вычислить среднее значение и т. д.) со своим значением 9,0, но я хочу упростить задачу с помощью кода. Есть ли какой-нибудь вариант?

Я попробовал приведенный выше фрагмент и ожидаю только значения, а не имени и значения столбца.

Вы возвращаете Rating, почему вы работаете со строкой?

M. Deinum 07.08.2024 12:03

Возможно, вы определили рейтинг как запись, содержащую строку? Просто переопределить его, чтобы использовать int?

J Asgarov 07.08.2024 12:04

@M.Deinum @J Ashgarov Действительно, Рейтинг - это рекорд с оценкой параметра как двойной. публичная запись Rating(двойной рейтинг) { } Итак, следует ли мне использовать целое число вместо записи? я тебя не понял..

Rupesh Sukale 07.08.2024 12:09

Вам следует извлечь вложенный атрибут и преобразовать его в целое число return rating.get().getRating().intValue(); (нулевые проверки проверяются самостоятельно)

Nikolai Shevchenko 07.08.2024 12:22

Более того, я считаю, что вы получите только некоторые ответы по поводу упаковки значения. Это самый простой подход.

Nguyen Huu Phuc 07.08.2024 12:28
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуй это:

В репозитории: Изменен метод findRating, чтобы он возвращал необязательный. Использовал JdbcTemplate для прямого сопоставления набора результатов с целочисленным значением. Метод запроса извлекает целочисленное значение из набора результатов и помещает его в необязательный элемент.

public Optional<Integer> findRating(Integer id) {
        String sql = "SELECT rating FROM movie WHERE id = ?";
        return jdbcTemplate.query(sql, new Object[]{id}, rs -> {
            if (rs.next()) {
                return Optional.of(rs.getInt("rating"));
            } else {
                return Optional.empty();
            }
        });
    }

В контроллере: Изменен тип возвращаемого значения метода findRating на ResponseEntity. Если рейтинг найден, он печатает его и возвращает в виде ответа HTTP 200 OK. Если рейтинг не найден, возвращается ответ HTTP 404 Not Found.

@GetMapping("/rating/{id}")
public ResponseEntity<Integer> findRating(@PathVariable Integer id) {
    Optional<Integer> rating = runRepository.findRating(id);
    if (rating.isPresent()) {
        System.out.println("rating is -------" + rating.get());
        return new ResponseEntity<>(rating.get(), HttpStatus.OK);
    } else {
        return new ResponseEntity<>(HttpStatus.NOT_FOUND);
    }
}

При этом из репозитория возвращается только целочисленное значение рейтинга, которое аккуратно обрабатывается в контроллере.

Другие вопросы по теме