【问题标题】:How to sort data in spring jpa?如何在spring jpa中对数据进行排序?
【发布时间】:2020-08-24 15:50:29
【问题描述】:

我正在编写我的第一个 Web 应用程序项目,该项目是关于使用 Spring Boot、Hibernate 和 MySql 在 Java 中租车的。 在我的应用程序中,我希望有类似排序方法。我通过在我的视图中添加一个输入来实现这一点,用户可以在其中输入例如汽车的类型或型号。我想得到查询的结果,例如 type='sportcar' 并从这个结果中我想对数据进行排序,例如按价格 DESC 或 ASC。

这是我的观点代码

<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";
}

我认为我的方法不正确。在这种情况下,如何修改我的代码以获得令人满意的结果和好的方法?

【问题讨论】:

  • 不要重新发明Sort 类(Spring 支持直接将其用作控制器参数,为您解析属性和方向)。
  • @chrylis-onstrike- 哦,谢谢,我不知道春天有这种魔法:D

标签: java spring hibernate model-view-controller


【解决方案1】:

检查spring jpa doc,JPA 支持排序,在你的情况下:

public interface CarRepository extend CrudRepository<Car, Long> {

  List<Car> findByTypeOrderByPriceDesc(String type); //sportsCar, order by price desc
}

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2022-11-23
    • 2019-04-29
    相关资源
    最近更新 更多