1、分页需求
若依
ruoyi
框架主要针对Sql
进行了分页集成,像平时别的一些数据库或者中间件的分页,则需要自己实现.
本文主要使用ES
的分页查询为例,展示前后端的基本操作,原理可以类推到其他中间件分页查询上.文章来源地址https://www.toymoban.com/news/detail-522238.html
2、vue前端保持不变
//...
//前端逻辑基本不变,使用原来的组件即可
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
//...
3、controller组装前端所需分页对象
/**
* 查询XX列表
* query: 查询条件对象
*/
@PreAuthorize("@ss.hasPermi('xxx:xxx:list')")
@GetMapping("/list")
public TableDataInfo list(Query query) {
//startPage();
//pageNum和pageSize的设置由query传入进行处理,传到serviceImpl方法中
Page<TestVo> pageInfo = testService.selectMyPage(query);
List<TestVo> list = pageInfo.getContent();//ES的分页结果list对象
//getDataTable(list);
//将原来的getDataTable()方法拿出来进行rows和total的赋值,再传给前端
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
rspData.setRows(list);
rspData.setTotal(pageInfo.getTotalElements());//ES的分页数据总数
return rspData;
}
4、serviceimpl实现分页逻辑
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
/**
* 查询热词管理列表
*/
@Override
public Page<TestVo> selectMyPage(Query query){
//接受前端传过来的分页参数
Integer pageNum = query.getPageNum();
Integer pageSize = query.getPageSize();
if(pageNum<1 || pageSize<1){
throw new RuntimeException("分页参数需从1开始");
}
//组装查询条件 must类似and匹配到所有字段后进行组合查询
BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
if(StringUtils.isNotBlank(query.getCol1())){
queryBuilder.must(termQuery("col1", query.getCol1()));
}
if(StringUtils.isNotBlank(query.getCol2())){
//类似like的操作,针对不能分词的字段进行模糊查询,数据量大不推荐,性能不友好
queryBuilder.must(wildcardQuery("col2", "*"+query.getCol2()+"*"));
}
NativeSearchQuery build = new NativeSearchQueryBuilder()
.withQuery(queryBuilder)
.withPageable(PageRequest.of(pageNum-1, pageSize))
.build();
log.info("列表查询的语句:{}", build.getQuery().toString());
SearchHits<TestVo> search = elasticsearchRestTemplate.search(build, TestVo.class);
SearchPage<TestVo> page = SearchHitSupport.searchPageFor(search, build.getPageable());
//高亮结果集,也可以用page.getHighlightFields()获取
List<TestVo> list = new ArrayList<>();
for (SearchHit<TestVo> each : page) {
TestVo vo = each.getContent();
list.add(vo);
}
//组装分页对象 这里主要是ES返回的分页对象
Page<TestVo> pageInfo = new PageImpl<>(list, build.getPageable(), search.getTotalHits());
return pageInfo;
//原来的mapper查询如下
//return testMapper.selectTestList(vo);
}
文章来源:https://www.toymoban.com/news/detail-522238.html
到了这里,关于若依框架ruoyi前后端实现自定义分页功能(ES分页查询)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!