• 75:第六章:开发文章服务:8:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】;(没什么好说的,就是使用了tkmybatis的条件查询;)


    说明:

    (1)本篇博客内容:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】;

    目录

    一:本篇博客内容,根据条件,分页查询当前登录用户的,文章列表;

    二:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】:Controller部分;

    1.在【api】接口工程的ArticleControllerApi接口中,定义【根据条件,分页查询当前登录用户的,文章列表,接口】;

    2.在【article】文章服务的ArticleController类中,去实现【根据条件,分页查询当前登录用户的,文章列表,接口】;

    三:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】:Service部分;

    1.在【article】文章服务的ArticleService接口中,定义一个【根据条件,分页查询当前登录用户的,方法】;

    2.在【article】文章服务的ArticleServiceImpl类中,去实现【根据条件,分页查询当前登录用户的,方法】;

    四:效果;


    一:本篇博客内容,根据条件,分页查询当前登录用户的,文章列表;


    二:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】:Controller部分;

    1.在【api】接口工程的ArticleControllerApi接口中,定义【根据条件,分页查询当前登录用户的,文章列表,接口】;

    1. /**
    2. * 根据条件,分页查询当前登录用户的,文章列表,接口;
    3. * @param userId:当前登录用户id;
    4. * @param keyword:一个查询条件:文章搜索关键字;(可以为空)
    5. * @param status:一个查询条件:文章的状态;(可以为空)
    6. * @param startDate:一个查询条件:文章的开始时间;(可以为空)
    7. * @param endDate:一个查询条件:文章的结束时间;(可以为空)
    8. * @param page:分页查询,当前页码;
    9. * @param pageSize:每页条目数
    10. * @return
    11. */
    12. @ApiOperation(value = "根据条件,分页查询当前登录用户的,文章列表", notes = "根据条件,分页查询当前登录用户的,文章列表", httpMethod = "POST")
    13. @PostMapping("/queryMyList") //设置路由,这个是需要前后端约定好的;
    14. public GraceJSONResult queryMyList(@RequestParam String userId,
    15. @RequestParam String keyword,
    16. @RequestParam Integer status,
    17. @RequestParam Date startDate,
    18. @RequestParam Date endDate,
    19. @RequestParam Integer page,
    20. @RequestParam Integer pageSize);

     说明:

    (1)该接口的url、请求方式、参数,不是瞎写的,需要前后端保持一致;

    2.在【article】文章服务的ArticleController类中,去实现【根据条件,分页查询当前登录用户的,文章列表,接口】;

    1. /**
    2. * 前台的,根据条件,分页查询当前登录用户的,文章列表,接口;
    3. * @param userId:当前登录用户id;
    4. * @param keyword:一个查询条件:文章搜索关键字;(可以为空)
    5. * @param status:一个查询条件:文章的状态;(可以为空)
    6. * @param startDate:一个查询条件:文章的开始时间;(可以为空)
    7. * @param endDate:一个查询条件:文章的结束时间;(可以为空)
    8. * @param page:分页查询,当前页码;
    9. * @param pageSize:每页条目数
    10. * @return
    11. */
    12. @Override
    13. public GraceJSONResult queryMyList(String userId, String keyword, Integer status,
    14. Date startDate, Date endDate, Integer page, Integer pageSize) {
    15. // 1.如果前端传的userId为空; 就返回一个信息是"文章列表查询参数错误!"的GraceJSONResult;
    16. if (StringUtils.isBlank(userId)) {
    17. return GraceJSONResult.errorCustom(ResponseStatusEnum.ARTICLE_QUERY_PARAMS_ERROR);
    18. }
    19. // 2.如果前端传的page或者pageSize为空,我们就给其设置默认值,page设为1,pageSize设为10;
    20. if (page == null) {
    21. page = COMMON_START_PAGE; //在BaseController中定义的常量;
    22. }
    23. if (pageSize == null) {
    24. pageSize = COMMON_PAGE_SIZE;
    25. }
    26. // 3.调用Service层逻辑,去查询文章列表;
    27. PagedGridResult pagedGridResult = articleService.queryMyArticleList(userId, keyword, status, startDate, endDate, page, pageSize);
    28. // 4.把"根据前端要求,包装好的pagedGridResult对象",返回给前端;
    29. return GraceJSONResult.ok(pagedGridResult);
    30. }

    三:开发前台的【根据条件,分页查询当前登录用户的,文章列表,接口】:Service部分;

    1.在【article】文章服务的ArticleService接口中,定义一个【根据条件,分页查询当前登录用户的,方法】;

    1. /**
    2. * 根据条件,分页查询当前登录用户的,文章列表;
    3. * @param userId:当前登录用户id;
    4. * @param keyword:一个查询条件:文章搜索关键字;(可以为空)
    5. * @param status:一个查询条件:文章的状态;(可以为空)
    6. * @param startDate:一个查询条件:文章的开始时间;(可以为空)
    7. * @param endDate:一个查询条件:文章的结束时间;(可以为空)
    8. * @param page:分页查询,当前页码;
    9. * @param pageSize:每页条目数
    10. * @return
    11. */
    12. public PagedGridResult queryMyArticleList(String userId, String keyword, Integer status,
    13. Date startDate, Date endDate, Integer page, Integer pageSize);

    2.在【article】文章服务的ArticleServiceImpl类中,去实现【根据条件,分页查询当前登录用户的,方法】;

    1. /**
    2. * 根据条件,分页查询当前登录用户的,文章列表;
    3. * @param userId:当前登录用户id;
    4. * @param keyword:一个查询条件:文章搜索关键字;(可以为空)
    5. * @param status:一个查询条件:文章的状态;(可以为空)
    6. * @param startDate:一个查询条件:文章的开始时间;(可以为空)
    7. * @param endDate:一个查询条件:文章的结束时间;(可以为空)
    8. * @param page:分页查询,当前页码;
    9. * @param pageSize:每页条目数
    10. * @return
    11. */
    12. @Override
    13. public PagedGridResult queryMyArticleList(String userId, String keyword, Integer status,
    14. Date startDate, Date endDate, Integer page, Integer pageSize) {
    15. // 1. 根据参数情况,构建查询条件;
    16. // 1.1 先创建一个查询实例,这个查询是针对Article作查询的;
    17. Example example = new Example(Article.class);
    18. // 1.2 设置排序方式;其中的"createdTime",指的是Article类中的createTime字段;
    19. example.orderBy("createTime").desc();
    20. // 1.3 给上面的查询实例,增加查询条件;
    21. Example.Criteria criteria = example.createCriteria();
    22. // 1.3.1 如果前端设置了"搜索关键字"这个条件;那么我们就针对文章的标题,根据这个关键字去模糊查询;
    23. if (StringUtils.isNotBlank(keyword)) {
    24. //这儿就不使用andEqualTo()了,而是使用andLike()去模糊查询;然后,后面我们增加了%来匹配;
    25. criteria.andLike("title", "%" + keyword + "%");
    26. }
    27. // 1.3.2 如果前端设置了"用户id"这个条件,我们查询的时候,article表中的publish_user_id字段需要等于前端传的publishUserId;
    28. if (StringUtils.isNotBlank(userId)) {
    29. criteria.andEqualTo("publishUserId", userId);
    30. }
    31. // 1.3.3.1 如果前端设置了"文章状态"这个条件,并且用户状态是我们规定的那几种状态之一,那么就设置上即可;
    32. if (ArticleReviewStatus.isArticleStatusValid(status)) {
    33. criteria.andEqualTo("articleStatus", status);
    34. }
    35. // 1.3.3.2 如果前端设置了"文章状态"这个条件,并且用户状态是"12",那么就需要根据我们这儿的处理逻辑,予以转换;
    36. if (status != null && status == 12) {
    37. criteria.andEqualTo("articleStatus", ArticleReviewStatus.REVIEWING.type)
    38. .orEqualTo("articleStatus", ArticleReviewStatus.WAITING_MANUAL.type);
    39. }
    40. /**
    41. * 1.3.4 对于那些,用户已经删除了的(逻辑删除,其实该文章在数据库中也还有,只是在用户看来,这篇文章他自己已经删除
    42. * 了;不过对于这些"用户已经逻辑删除的文章",后台管理员也还是可以看到的;)
    43. */
    44. criteria.andEqualTo("isDelete", YesOrNo.NO.type);
    45. // 1.3.5 如果前端设置了"文章日期"这个条件;
    46. if (startDate != null) {
    47. //那么,使用andGreaterThanOrEqualTo()方法设置,时间需要>=我们传的startDate;
    48. criteria.andGreaterThanOrEqualTo("createTime", startDate);
    49. }
    50. if (endDate != null) {
    51. //那么,使用andLessThanOrEqualTo()方法设置,时间需要<=我们传的endDate;
    52. criteria.andLessThanOrEqualTo("createTime", endDate);
    53. }
    54. // 1.4 设置分页;
    55. PageHelper.startPage(page, pageSize);
    56. // 1.5 去查询
    57. List
      list = articleMapper.selectByExample(example);
    58. // 1.6 把查询结果,包装成符合前端要求的pagedGridResult格式的;
    59. PagedGridResult pagedGridResult = setterPagedGrid(list, page);
    60. return pagedGridResult;
    61. }

    说明:

    (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的;

  • 相关阅读:
    HBase (二) --------- HBase 安装
    Java核心知识点整理大全6-笔记
    PIE-engine 教程 ——动态展示全国2000-2020年人口变化信息
    TypeScript查缺补漏【TS自动重启+自动运行+parcel自动打包】
    Transformer——encoder
    CentOS 7:dmPython安装及测试连接达梦数据库
    信息系统项目管理师 12题
    DVWA - Brute Force
    ubuntu 20.04 使用systemback自定义系统镜像和系统备份
    QT工程编译过程学习
  • 原文地址:https://blog.csdn.net/csucsgoat/article/details/126317896