【代码解析】代码解析之分页查询(1)

public PageBean<Account> findPage(Account account, PageBean<Account> pageBean){
		ExampleMatcher withMatcher = ExampleMatcher.matching().withMatcher("mobile", GenericPropertyMatchers.contains());
		withMatcher = withMatcher.withIgnorePaths("balance","sex","status");
		Example<Account> example = Example.of(account, withMatcher);
		Pageable pageable = PageRequest.of(pageBean.getCurrentPage()-1, pageBean.getPageSize());
		Page<Account> findAll = accountDao.findAll(example, pageable);
		pageBean.setContent(findAll.getContent());
		pageBean.setTotal(findAll.getTotalElements());
		pageBean.setTotalPage(findAll.getTotalPages());
		return pageBean;
	}

这段代码一个用于分页查询 Account 对象的方法, 它使用Spring Data JPA的功能,通过ExampleMatcherPageable对象来构建和执行分页查询。

以下是这一段代码的解析:

1.

public PageBean<Account> findPage(Account account, PageBean<Account> pageBean)

这一行代码定义了一个公共的方法,返回类型是PageBean<Account>,它接收两个两个参数:一个是 Account 对象,表示查询条件,一个是 PageBean< Account >对象,表示分页信息。

 2.

ExampleMatcher withMatcher = ExampleMatcher.matching().withMatcher("mobile", GenericPropertyMatchers.contains());

这一行代码创建了一个ExampleMatcher 的对象,用于匹配查询条件,"mobile"指定了匹配的方式,GenericPropertyMatchers.contains()表示该属性值应该包含给定的值

3. 

withMatcher = withMatcher.withIgnorePaths("balance","sex","status");

这一行代码指定了三个属性("balance","sex","status")在匹配的时候将被忽略,意思是即便查询 Account 中的这些属性与给定的 account 对象的属性不完全匹配,它们也会被认为是匹配的。

4.

    Example<Account> example = Example.of(account, withMatcher); 

使用上面创建的 withMatecher ,从给定的 account 对象创建一个    Example<Account> 对象,这个对象用户查询数据库中的 account 记录

5. 

Pageable pageable = PageRequest.of(pageBean.getCurrentPage()-1, pageBean.getPageSize());

这里创建了一个 Pageable 对象,用于分页查询,它从给定的pageBean中获取当前页码和页面大小,然后创建一个新的对象 PageRequest 。需要注意的是页码是从0开始,所以需要当前页码减去1

6.

Page<Account> findAll = accountDao.findAll(example, pageable);

使用上面创建的example,pageable 对象,从数据访问对象,执行分页查询,查询的结果是一个 Page<Account> 对象,该对象包含查询到的记录和分页信息。

7.

pageBean.setContent(findAll.getContent());

将查询结果中的内容传入pageBean 对象中

8.

pageBean.setTotal(findAll.getTotalElements())   

将查询的结果中的记录数传入pageBean 对象中

9.

 pageBean.setTotalPage(findAll.getTotalPages()); 

将查询的结果的总页数传入pageBean对象中

10.
  return pageBean;

返回pageBean 将包含所有必要的信息,调用此方法的客户端可以获取查询结果和分页信息

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用 ElasticSearch 的 RestTemplate 进行聚合分页查询时,你可以按照以下示例代码进行操作: ```java import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.builder.SearchSourceBuilder; import org.elasticsearch.search.sort.SortBuilders; import org.elasticsearch.search.sort.SortOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate; import org.springframework.data.elasticsearch.core.SearchHit; import org.springframework.data.elasticsearch.core.SearchHits; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.stereotype.Component; import java.io.IOException; @Component public class AggregationPaginationExample { @Autowired private RestHighLevelClient restHighLevelClient; @Autowired private ElasticsearchRestTemplate elasticsearchRestTemplate; public void searchWithAggregationAndPagination() throws IOException { SearchRequest searchRequest = new SearchRequest("your_index_name"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); // 设置查询条件 searchSourceBuilder.query(QueryBuilders.matchAllQuery()); // 设置排序规则 searchSourceBuilder.sort(SortBuilders.fieldSort("your_field_name").order(SortOrder.DESC)); // 设置分页参数 searchSourceBuilder.from(0); searchSourceBuilder.size(10); // 设置聚合条件 searchSourceBuilder.aggregation( AggregationBuilders.terms("your_aggregation_name").field("your_field_name") ); searchRequest.source(searchSourceBuilder); // 执行查询 SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); // 解析结果 SearchHits<YourEntityClass> searchHits = elasticsearchRestTemplate.search(searchRequest, YourEntityClass.class, IndexCoordinates.of("your_index_name")); for (SearchHit<YourEntityClass> searchHit : searchHits) { YourEntityClass entity = searchHit.getContent(); // 处理每个匹配的实体 } // 解析聚合结果 Terms aggregation = searchResponse.getAggregations().get("your_aggregation_name"); for (Terms.Bucket bucket : aggregation.getBuckets()) { String keyAsString = bucket.getKeyAsString(); long docCount = bucket.getDocCount(); // 处理每个聚合结果 } } } ``` 在上述示例代码中,你需要替换以下部分: - `your_index_name`:替换为你的索引名称。 - `your_field_name`:替换为你的字段名称。 - `your_aggregation_name`:替换为你的聚合名称。 - `YourEntityClass`:替换为你的实体类名称。 请确保已经正确配置了 ElasticSearch 的连接信息,并且已经导入了相应的依赖。另外,该示例使用了 Spring Data Elasticsearch 的 RestTemplate 进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值