说明:
(1)本篇博客内容:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】;
目录
一:本篇博客内容,根据条件,分页查询当前登录用户的,文章列表;
二:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】:Controller部分;
1.在【api】接口工程的ArticleControllerApi接口中,定义【根据条件,分页查询当前登录用户的,文章列表,接口】;
2.在【article】文章服务的ArticleController类中,去实现【根据条件,分页查询当前登录用户的,文章列表,接口】;
三:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】:Service部分;
1.在【article】文章服务的ArticleService接口中,定义一个【根据条件,分页查询当前登录用户的,方法】;
2.在【article】文章服务的ArticleServiceImpl类中,去实现【根据条件,分页查询当前登录用户的,方法】;
/** * 根据条件,分页查询当前登录用户的,文章列表,接口; * @param userId:当前登录用户id; * @param keyword:一个查询条件:文章搜索关键字;(可以为空) * @param status:一个查询条件:文章的状态;(可以为空) * @param startDate:一个查询条件:文章的开始时间;(可以为空) * @param endDate:一个查询条件:文章的结束时间;(可以为空) * @param page:分页查询,当前页码; * @param pageSize:每页条目数 * @return */ @ApiOperation(value = "根据条件,分页查询当前登录用户的,文章列表", notes = "根据条件,分页查询当前登录用户的,文章列表", httpMethod = "POST") @PostMapping("/queryMyList") //设置路由,这个是需要前后端约定好的; public GraceJSONResult queryMyList(@RequestParam String userId, @RequestParam String keyword, @RequestParam Integer status, @RequestParam Date startDate, @RequestParam Date endDate, @RequestParam Integer page, @RequestParam Integer pageSize);说明:
(1)该接口的url、请求方式、参数,不是瞎写的,需要前后端保持一致;
- /**
- * 前台的,根据条件,分页查询当前登录用户的,文章列表,接口;
- * @param userId:当前登录用户id;
- * @param keyword:一个查询条件:文章搜索关键字;(可以为空)
- * @param status:一个查询条件:文章的状态;(可以为空)
- * @param startDate:一个查询条件:文章的开始时间;(可以为空)
- * @param endDate:一个查询条件:文章的结束时间;(可以为空)
- * @param page:分页查询,当前页码;
- * @param pageSize:每页条目数
- * @return
- */
- @Override
- public GraceJSONResult queryMyList(String userId, String keyword, Integer status,
- Date startDate, Date endDate, Integer page, Integer pageSize) {
-
- // 1.如果前端传的userId为空; 就返回一个信息是"文章列表查询参数错误!"的GraceJSONResult;
- if (StringUtils.isBlank(userId)) {
- return GraceJSONResult.errorCustom(ResponseStatusEnum.ARTICLE_QUERY_PARAMS_ERROR);
- }
-
- // 2.如果前端传的page或者pageSize为空,我们就给其设置默认值,page设为1,pageSize设为10;
- if (page == null) {
- page = COMMON_START_PAGE; //在BaseController中定义的常量;
- }
- if (pageSize == null) {
- pageSize = COMMON_PAGE_SIZE;
- }
-
- // 3.调用Service层逻辑,去查询文章列表;
- PagedGridResult pagedGridResult = articleService.queryMyArticleList(userId, keyword, status, startDate, endDate, page, pageSize);
-
- // 4.把"根据前端要求,包装好的pagedGridResult对象",返回给前端;
- return GraceJSONResult.ok(pagedGridResult);
- }
- /**
- * 根据条件,分页查询当前登录用户的,文章列表;
- * @param userId:当前登录用户id;
- * @param keyword:一个查询条件:文章搜索关键字;(可以为空)
- * @param status:一个查询条件:文章的状态;(可以为空)
- * @param startDate:一个查询条件:文章的开始时间;(可以为空)
- * @param endDate:一个查询条件:文章的结束时间;(可以为空)
- * @param page:分页查询,当前页码;
- * @param pageSize:每页条目数
- * @return
- */
- public PagedGridResult queryMyArticleList(String userId, String keyword, Integer status,
- Date startDate, Date endDate, Integer page, Integer pageSize);
/** * 根据条件,分页查询当前登录用户的,文章列表; * @param userId:当前登录用户id; * @param keyword:一个查询条件:文章搜索关键字;(可以为空) * @param status:一个查询条件:文章的状态;(可以为空) * @param startDate:一个查询条件:文章的开始时间;(可以为空) * @param endDate:一个查询条件:文章的结束时间;(可以为空) * @param page:分页查询,当前页码; * @param pageSize:每页条目数 * @return */ @Override public PagedGridResult queryMyArticleList(String userId, String keyword, Integer status, Date startDate, Date endDate, Integer page, Integer pageSize) { // 1. 根据参数情况,构建查询条件; // 1.1 先创建一个查询实例,这个查询是针对Article作查询的; Example example = new Example(Article.class); // 1.2 设置排序方式;其中的"createdTime",指的是Article类中的createTime字段; example.orderBy("createTime").desc(); // 1.3 给上面的查询实例,增加查询条件; Example.Criteria criteria = example.createCriteria(); // 1.3.1 如果前端设置了"搜索关键字"这个条件;那么我们就针对文章的标题,根据这个关键字去模糊查询; if (StringUtils.isNotBlank(keyword)) { //这儿就不使用andEqualTo()了,而是使用andLike()去模糊查询;然后,后面我们增加了%来匹配; criteria.andLike("title", "%" + keyword + "%"); } // 1.3.2 如果前端设置了"用户id"这个条件,我们查询的时候,article表中的publish_user_id字段需要等于前端传的publishUserId; if (StringUtils.isNotBlank(userId)) { criteria.andEqualTo("publishUserId", userId); } // 1.3.3.1 如果前端设置了"文章状态"这个条件,并且用户状态是我们规定的那几种状态之一,那么就设置上即可; if (ArticleReviewStatus.isArticleStatusValid(status)) { criteria.andEqualTo("articleStatus", status); } // 1.3.3.2 如果前端设置了"文章状态"这个条件,并且用户状态是"12",那么就需要根据我们这儿的处理逻辑,予以转换; if (status != null && status == 12) { criteria.andEqualTo("articleStatus", ArticleReviewStatus.REVIEWING.type) .orEqualTo("articleStatus", ArticleReviewStatus.WAITING_MANUAL.type); } /** * 1.3.4 对于那些,用户已经删除了的(逻辑删除,其实该文章在数据库中也还有,只是在用户看来,这篇文章他自己已经删除 * 了;不过对于这些"用户已经逻辑删除的文章",后台管理员也还是可以看到的;) */ criteria.andEqualTo("isDelete", YesOrNo.NO.type); // 1.3.5 如果前端设置了"文章日期"这个条件; if (startDate != null) { //那么,使用andGreaterThanOrEqualTo()方法设置,时间需要>=我们传的startDate; criteria.andGreaterThanOrEqualTo("createTime", startDate); } if (endDate != null) { //那么,使用andLessThanOrEqualTo()方法设置,时间需要<=我们传的endDate; criteria.andLessThanOrEqualTo("createTime", endDate); } // 1.4 设置分页; PageHelper.startPage(page, pageSize); // 1.5 去查询 Listlist = articleMapper.selectByExample(example); // 1.6 把查询结果,包装成符合前端要求的pagedGridResult格式的; PagedGridResult pagedGridResult = setterPagedGrid(list, page); return pagedGridResult; }说明:
(1)看注释;
(2)在【1.3.3.2】这一步条件是设置时,使用到了,我们在【common】通用工程中,创建的ArticleReviewStatus枚举类,该枚举类来定义文章的状态;
(3)【1.3.3.2】这一步条件设置的原因如下;(然后,明白了这个逻辑后,就能发现,【1.3.3.1】这一步条件几乎不会执行)
(4)其实,这儿的根据条件查询的方式,和【65:第五章:开发admin管理服务:18:开发【根据条件,分页查询用户列表,接口】;】基本一致;
(1)先install一下整个项目;(2)记得使用SwitchHost开启虚拟域名映射;(3)使用Tomcat启动前端项目;(4)然后,启动后端项目;
………………
效果是OK的;