gpt4 book ai didi

java - 从请求参数创建动态查询的简洁方法

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:12 25 4
gpt4 key购买 nike

我正在使用 Spring MVC 3.2,并使用 JPA 作为持久层。我想做以下事情:

当这样的请求到达时 /some-item?param1=something&param2=123&order-by=some-field 我希望能够在持久层中自动构建查询,这样我就不必为 getAllItemsWith(final String param1, Final String param2...) 等创建十亿个方法。

我考虑过在 Map 中捕获请求参数,然后将其传递到存储库层,其中我有一个预定义的参数列表,我将检查该参数是否存在于映射中,以及是否添加了 necassaray 条件。不过,我想知道是否还有其他更好的方法来做到这一点?

最佳答案

我找到了解决这个问题的优雅方法。有这样的sql操作符“coalese”(一些解释: http://www.1keydata.com/sql/sql-coalesce.html )。它允许传递任何参数进行查询,并确保null参数将被忽略。

我的 DAO 接口(interface)示例(Spring data-jpa、MySQL):

@Query("select b from Book b where " +
"coalesce(b.name, '') like concat('%', :name, '%') " +
"and coalesce(b.author, '') like concat('%', :author, '%') " +
"and coalesce(b.category, '') like concat('%', :category, '%') " +
"and coalesce(b.publisher, '') like concat('%', :publisher, '%') " +
"and (b.available = :available1 or b.available = :available2)")
public Page<Book> findByParams(
@Param("name") String name
, @Param("author") String author
, @Param("category") String category
, @Param("publisher") String publisher
, @Param("available1") Boolean available1, @Param("available2") Boolean available2
, Pageable pageReq);

希望这有帮助

关于java - 从请求参数创建动态查询的简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18364089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com