Как отсортировать данные в Spring JPA? - PullRequest
1 голос
/ 09 мая 2020

Я пишу свой первый проект веб-приложения об аренде автомобилей в java с использованием Spring Boot, Hibernate и MySql. В моем приложении я хочу иметь что-то вроде методов сортировки. Я сделал это, добавив в свой обзор поле ввода, в котором пользователи могут вводить, например, тип или модель автомобиля. Я хочу получить результат запроса, например type = 'sportcar', и из этого результата я хочу отсортировать данные, например, по цене DES C или AS C.

Вот мой код просмотра

<body>
<form action="get" method="get">
    <div class="form-group col-md-4">
      <label for="inputState">Sort by</label>
      <select name="sortMethod" id="inputState" class="form-control">
        <option value="">Select sort method</option>
        <option value="priceDESC">price desc</option>
        <option value="priceASC">price asc</option>
      </select>
      <input type="submit" value="submit"/>
    </div>

</form>

<form action="get" method="get">
    Type:   <input type="text" name="type">
            <input type="submit" value="submit"/>
</form>

<form action="get" method="get">
    Brand:  <input type="text" name="brand"/>
            <input type="submit" value="submit"/>
</form>

<form action="get" method="get">
    Model:  <input type="text" name="model"/>
            <input type="submit" value="submit"/>
</form>

Вот мой код контроллера

@GetMapping(path = "/get")
public String getAllCars(ModelMap modelMap) {

    cars = carRepository.findAll();
    modelMap.addAttribute("cars", cars);
    return "car";
}

@GetMapping(path = "/get", params = "sortMethod")
public String getAllCars(@RequestParam(defaultValue = "priceASC", required = false) String sortMethod,
        ModelMap modelMap) {

    String parameterOfSort = "";
    String wayOfSort = "";
    char c;

    for (int i = 0; i < sortMethod.length(); i++) {
        c = sortMethod.charAt(i);
        if (c >= 64 && c <= 90)
            wayOfSort += c;
        else if (c >= 97 && c <= 122)
            parameterOfSort += c;
    }

    Sort.Direction sortType = Sort.Direction.valueOf(wayOfSort);

    cars = carRepository.findAll(Sort.by(sortType, parameterOfSort));
    modelMap.addAttribute("cars", cars);
    return "car";
}

@GetMapping(path = "/get", params = "type")
public String getCarsByType(@RequestParam String type, ModelMap modelMap) {

    cars = carRepository.findCarByType(type);
    modelMap.addAttribute("cars", cars);
    return "car";
}

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

1 Ответ

3 голосов
/ 09 мая 2020

Проверьте spring jpa do c, сортировку поддержки JPA, в вашем случае:

public interface CarRepository extend CrudRepository<Car, Long> {

  List<Car> findByTypeOrderByPriceDesc(String type); //sportsCar, order by price desc
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...