Java 使用动态查询进行spring mvc分页
我试图在SpringMVC中实现分页 就我而言,我有一个审查实体,它由reviewStatus和提交日期组成 我正在尝试使用JpaRepository,但我不确定如何使用它支持以下搜索查询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
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 = ? ");
}
}