页面条件查询接口
需求分析
在页面输入查询条件,查询符合条件的页面信息。
查询条件如下:
站点Id:精确匹配
模板Id:精确匹配
页面别名:模糊匹配
服务端
Dao
使用 CmsPageRepository中的findAll(Example<S> var1, Pageable var2)方法实现,无需定义。
下边测试fifindAll方法实现自定义条件查询:
//页面条件查询测试dao
@Test
public void testFindAllByExample() {
Pageable pageable = PageRequest.of(0, 10);
//创建条件匹配器,注意匹配器每返回一个引用,在创建就是一个新对象了
//可以链式调用实现多条件
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
//要匹配的字段,和查询方式
//contains:模糊匹配 startWith:开头匹配 等等
.withMatcher("pageAliase", ExampleMatcher.GenericPropertyMatchers.contains());
// .withMatcher("pageAliase", ExampleMatcher.GenericPropertyMatchers.startsWith());
CmsPage cmsPage = new CmsPage();
cmsPage.setPageAliase("分类导航");
Example<CmsPage> example = Example.of(cmsPage,exampleMatcher);
Page<CmsPage> all = cmsPageRepository.findAll(example, pageable);
System.out.println(all);
}
Service
由于前面编写了普通查询,也将封装的条件查询类QueryPageRequest
也传入参数中
因此,对之前的进行改造:
- 定义条件查询对象Example,在定义条件值类型对象,cmsPage
- 由于只有页面别名为条件匹配,其他为精确匹配,因此定义ExampleMacher条件匹配器,传入匹配字段,和查询方式
- 使用lang3工具类公的isNotEmpty方法判断三个查询参数,存在就设置进去
在findAll方法中将example对象传入,测试
public QueryResponseResult findList( int page, int size, QueryPageRequest queryPageRequest){ /** * 添加条件查询 */ //保证传过来的对象不为空 if (queryPageRequest == null) { queryPageRequest = new QueryPageRequest(); } //自定义分页查询 // 定义条件匹配器 ExampleMatcher exampleMatcher = ExampleMatcher.matching() .withMatcher("pageAliase", ExampleMatcher.GenericPropertyMatchers.contains()); //条件值对象 CmsPage cmsPage = new CmsPage(); if (StringUtils.isNotEmpty(queryPageRequest.getSiteId())) { cmsPage.setSiteId(queryPageRequest.getSiteId()); } if (StringUtils.isNotEmpty(queryPageRequest.getTemplateId())) { cmsPage.setTemplateId(queryPageRequest.getTemplateId()); } if (StringUtils.isNotEmpty(queryPageRequest.getPageAliase())) { cmsPage.setPageAliase(queryPageRequest.getPageAliase()); } //定义条件对象 Example<CmsPage> example = Example.of(cmsPage, exampleMatcher); //分页参数 if (page<=0){ page = 1; } page = page - 1; if (size <= 0) { size = 10; } Pageable pageable = PageRequest.of(page, size); Page<CmsPage> all = cmsPageRepository.findAll(example,pageable); QueryResult queryResult = new QueryResult(); queryResult.setList(all.getContent()); queryResult.setTotal(all.getTotalElements()); QueryResponseResult qr = new QueryResponseResult(CommonCode.SUCCESS,queryResult); return qr; }
Controller
调用service,无需修改,