本文最后更新于 2026年4月10日 晚上
查询标签列表接口的实现
查询标签列表接口的需求
一个文章可以对应多个标签
要根据标签名进行分页查询
不能将已经删除的标签查出来
根据标签查出该标签下有多少篇文章
代码实现
由于这是关于后台的tag接口,所以要在后台项目中创建一个TagController
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @RestController @RequestMapping("/tags") @Api(tags = "标签", description = "文章标签相关接口") public class TagController { @Autowired private TagService tagService;
@GetMapping @SystemLog(businessName = "分页查询标签列表") @ApiOperation(value = "分页查询标签列表", notes = "获取标签列表", response = TagVo.class, responseContainer = "List") public ResponseResult<PageVo> tagList(Integer pageNum, Integer pageSize, TagDto tagDto) { return tagService.tagList(pageNum, pageSize, tagDto); } }
|
创建TagDto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
@Data @ApiModel(description = "标签操作请求对象") public class TagDto { @ApiModelProperty(value = "标签ID(更新时必填)", example = "1") private Long id; @ApiModelProperty(value = "标签名称", required = true, example = "Java") private String name; @ApiModelProperty(value = "备注", example = "Java相关技术文章") private String remark;
@ApiModelProperty(value = "标签ID列表", required = true, example = "[1,2,3]") private List<Long> ids;
@ApiModelProperty(value = "关键字(用于模糊搜索标签名称)", example = "Vue") private String keywords; }
|
然后在TagServiceImpl写接口的功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| @Override public ResponseResult<PageVo> tagList(Integer pageNum, Integer pageSize, TagDto tagDto) { LambdaQueryWrapper<Tag> tagWrapper = new LambdaQueryWrapper<>(); tagWrapper.like(StringUtils.hasText(tagDto.getKeywords()), Tag::getName, tagDto.getKeywords()); tagWrapper.eq(Tag::getDelFlag, SystemConstants.NOT_DELETED); tagWrapper.orderByDesc(Tag::getCreateTime);
Page<Tag> page = new Page<>(); page.setCurrent(pageNum); page.setSize(pageSize); page(page, tagWrapper);
List<Long> tagIds = page.getRecords().stream() .map(Tag::getId) .collect(Collectors.toList());
Map<Long, Long> tagArticleCountMap; if (!tagIds.isEmpty()) { LambdaQueryWrapper<ArticleTag> articleTagWrapper = new LambdaQueryWrapper<>(); articleTagWrapper.in(ArticleTag::getTagId, tagIds); List<ArticleTag> articleTagList = articleTagMapper.selectList(articleTagWrapper); tagArticleCountMap = articleTagList.stream() .collect(Collectors.groupingBy(ArticleTag::getTagId, Collectors.counting())); } else { tagArticleCountMap = Map.of(); }
List<TagVo> tagVoList = page.getRecords().stream() .map(tag -> { TagVo tagVo = BeanCopyUtils.copyBean(tag, TagVo.class); tagVo.setArticleCount(tagArticleCountMap.getOrDefault(tag.getId(), 0L).intValue()); return tagVo; }) .collect(Collectors.toList());
PageVo pageVo = new PageVo(tagVoList, page.getTotal()); return ResponseResult.okResult(pageVo); }
|
需要注意的是,由于前端需要接收标签的创建时间,所以要在TagVo里添加创建日期的参数
这样关于标签的分页查询接口基本就实现了
PS:该系列只做为作者学习开发项目做的笔记用
不一定符合读者来学习,仅供参考
预告
后续会记录博客的开发过程
每次学习会做一份笔记来进行发表
“一花一世界,一叶一菩提”
版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/