簡體   English   中英

如何使用Spring Boot處理不同的搜索?

[英]how to use spring boot to handle different search?

在spring boot中使用spring data jpa創建搜索功能的最佳實踐是什么?

@GetMapping("/search")
public List<Hotel> getAllByCriteria(@RequestParam MultiValueMap<String, String> criteria) {
    if (criteria.containsKey("cityPublicId")) {
        String cityPublicId = criteria.getFirst("cityPublicId");
        if (criteria.containsKey("amenity")) { 
            List<String> amenities = criteria.get("amenity");
            return svc.findAllByCityAndAmenities(cityPublicId, amenities);
           }
        return svc.findAllByCity(cityPublicId);
    }
    //currently only support one amenity filtration
    else if (criteria.containsKey("amenity")) {
        return svc.findAllByAmenities(criteria.get("amenity"));
    }
    return null;
}

當前,我必須確定所有可能的准則組合才能使用相應的方法,是否存在通用的方式來處理所有情況? 或至少不對所有可能的組合進行硬編碼。

PS:如果我想按多種便利條件過濾結果,是否可以使用findByAmenitiesContains(set)? 酒店實體具有一套便利設施的地方。 我必須使用@query創建自定義查詢嗎?

謝謝。

事后,您可以使用不同的請求有效負載實體來處理同一終結點

@GetMapping(path = "/search", params = { "cityId" })
public List<Hotel> getAllByCriteria(ByCityPublicId byCity) {
    return svc.findAllByCity(byCity.getCityPublicId())
}

@GetMapping(path = "/search", params = { "cityId", "amenity" })
public List<Hotel> getAllByCriteria(ByCityPublicIdAndAmenity byCityAndAmenitities) {
    return svc.findAllByCityAndAmenities(byCityAndAmenitities.getCityPublicId(), byCityAndAmenitities.getAmenitities())
}

@GetMapping(path = "/search", params = { "amenity" })
public List<Hotel> getAllByCriteria(ByAmenity byAmenity) {
    return svc.findAllByAmenities(byAmenity.getAmenity());
}

您基本上有以下選擇:

  • 使用自定義方法從輸入數據中以編程方式創建查詢。 這為您提供最大的靈活性,但也需要最多的工作。

  • 使用規范 幾乎相同的靈活性和幾乎相同的工作量。

  • 通過示例使用查詢 工作量很少,靈活性有限。

關於PS: 查詢推導的功能已被詳細記錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM