Java 使用动态查询进行spring mvc分页

Java 使用动态查询进行spring mvc分页,java,spring,spring-mvc,pagination,spring-data-jpa,Java,Spring,Spring Mvc,Pagination,Spring Data Jpa,我试图在SpringMVC中实现分页 就我而言,我有一个审查实体,它由reviewStatus和提交日期组成 我正在尝试使用JpaRepository,但我不确定如何使用它支持以下搜索查询 SELECT * from review WHERE review.reviewStatus = 2 AND ( review.submittedOn BETWEEN '2015-09-08' AND '2015-09-09' ) 我可以看到(参考)我们可以为特定的查询定义方法,比如findbynam

我试图在SpringMVC中实现分页

就我而言,我有一个审查实体,它由reviewStatus和提交日期组成

我正在尝试使用JpaRepository,但我不确定如何使用它支持以下搜索查询

SELECT * from review WHERE review.reviewStatus = 2 AND 
  ( review.submittedOn BETWEEN '2015-09-08' AND '2015-09-09' )
我可以看到(参考)我们可以为特定的查询定义方法,比如findbyname

但是,在我的情况下,如果用户不提供状态,那么上面的查询就会变成:

SELECT * from review WHERE ( review.submittedOn BETWEEN 
  '2015-09-08' AND '2015-09-09' )
如果没有提供提交日期,则变为

SELECT * from review WHERE review.reviewStatus = 2
简而言之,查询取决于最终用户输入的值,我希望使用相同的参数来实现分页

请引导和/或共享实现相同功能的链接

提前谢谢。

看一看

您可以将可分页对象传递到
findAll
方法中

依照

公共列表搜索(字符串搜索词,int-pageIndex){
LOGGER.debug(“使用搜索词搜索人员:“+searchTerm”);
//将PersonSpecifications类创建的规范和页面规范传递到存储库。
Page requestedPage=personRepository.findAll(lastNameIsLike(searchTerm),constructPageSpecification(pageIndex));
返回requestedPage.getContent();
}
/**
*返回指定所需结果页的新对象。
*@param pageIndex通缉结果页面的索引
*@返回
*/
专用分页可构造分页规范(int pageIndex){
Pageable pageSpecification=新的页面请求(页面索引、每页的人数、sortByLastNameAsc());
返回页面规格;
}

看看spring mvc分页:

对于动态查询,您可以使用
Stringbuilder
根据用户输入构建查询。大致如下:

    pulic YourDomainObject searchDynamically(String reviewStatus, String date){
      StringBuilder sql = new StringBuilder();
      sql.append("SELECT * FROM review WHERE ");

      if(null != reviewStatus && null != date){
         sql.append(" reviewStatus = ? and date = ? ");

      }elseif(null != reviewStatus){
         sql.append(" reviewStatus = ? ");

      }elseif(null != date){
         sql.append(" date = ? ");
      }
    }

我试着调查了一下。但我恐怕无法获得所需的信息。pageable对象可用于设置顺序,但我不确定是否可以将其用于查询本身。如果你能提供一个例子,这样我就可以了解我目前没有理解的东西了,那就太好了?我已经看过了这个教程,它出现在谷歌搜索结果的第一页。你是说基于用户传递的内容的动态查询吗?问题在于分页还是构建查询?你问题的题目似乎有点难confusing@jmcg实际上,两者都有一点。我第一次尝试使用分页的动态查询。我使用了一个简单的“全选”查询,没有任何问题。但不知道如何执行动态查询并获得可以在正确分页中显示的结果
    pulic YourDomainObject searchDynamically(String reviewStatus, String date){
      StringBuilder sql = new StringBuilder();
      sql.append("SELECT * FROM review WHERE ");

      if(null != reviewStatus && null != date){
         sql.append(" reviewStatus = ? and date = ? ");

      }elseif(null != reviewStatus){
         sql.append(" reviewStatus = ? ");

      }elseif(null != date){
         sql.append(" date = ? ");
      }
    }