Мне нужно только значение из столбца целочисленного типа.
У меня есть этот код здесь:
В контроллере:
@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, но я хочу упростить задачу с помощью кода. Есть ли какой-нибудь вариант?
Я попробовал приведенный выше фрагмент и ожидаю только значения, а не имени и значения столбца.
Возможно, вы определили рейтинг как запись, содержащую строку? Просто переопределить его, чтобы использовать int?
@M.Deinum @J Ashgarov Действительно, Рейтинг - это рекорд с оценкой параметра как двойной. публичная запись Rating(двойной рейтинг) { } Итак, следует ли мне использовать целое число вместо записи? я тебя не понял..
Вам следует извлечь вложенный атрибут и преобразовать его в целое число return rating.get().getRating().intValue();
(нулевые проверки проверяются самостоятельно)
Более того, я считаю, что вы получите только некоторые ответы по поводу упаковки значения. Это самый простой подход.
Попробуй это:
В репозитории: Изменен метод 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);
}
}
При этом из репозитория возвращается только целочисленное значение рейтинга, которое аккуратно обрабатывается в контроллере.
Вы возвращаете
Rating
, почему вы работаете со строкой?