Springboot评论回复功能:利用mybatis-plus 中的page分页已有的list

问题:在做文章评论回复模块时,需要将文章下的所有评论以及评论下的回复数据都查出来,把对应的回复数据都显示在对应的评论下方,然后对评论数据进行分页。


思路:

1.根据文章id去评论表中查询该文章下的所有评论,然后再根据每个评论id去回复表中查询该评论下的所有回复内容,查询的数据均按照更新时间进行排序。

2.用list去封装评论信息,然后循环遍历集合,在用list封装该改评论下所有回复数据,最后在将回复list封装到评论list中,这样我就得到了包含所有回复数据的评论集合。

3.最后一步就是编写分页类,调用即可。
话不多说,上代码:

数据库信息:
评论表:

 回复表:

 实体类:
 

@Data
public class KbmsCommentAndReplyuserVo implements Serializable {
    /**
     * 评论表id
     */
    @TableId
    private Integer commentId;

    /**
     * 用户(评论者)id
     */
    private Integer userId;

    /**
     * 文章(资源)id
     */
    private Integer issueId;

    /**
     * 用户名字
     */
    private String username;

    /**
     * 用户头像
     */
    private String avatar;

    /**
     * 评论内容
     */
    private String content;

    /**
     * 标识字段, 0 文章    1 资源
     */
    private Byte label;

    /**
     * 评论是否回复
     */
    private String commentisreply;

    /**
     * 回复集合
     */
    private List<KbmsReplyuser>  kbmsReplyusers;

    /**
     * 记录创建时间
     * */
     private Date createtime;
    private Date updatetime;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}

mapper:

@Repository
public interface CommentAndReplyuserMapper extends BaseMapper<KbmsCommentAndReplyuserVo> {

    List<KbmsCommentAndReplyuserVo> CommentAndReplyuser(String issueId);
}

Xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.*.*.mapper.CommentAndReplyuserMapper">

    <select id="CommentAndReplyuser"  parameterType="String" resultType="com.*.*.vo.KbmsCommentAndReplyuserVo">
        SELECT *
        FROM  kbms_comment where issue_id=#{issueId}
        order by createTime desc
    </select>

</mapper>

service:

public interface CommentService extends IService<KbmsComment> {

    R CommentAdd(String token, RequestCommonPort commonPort);

    R CommentDel(String token, RequestCommonPort commonPort);

    R CommentfindAll(String token, RequestCommonPort commonPort, HttpServletRequest request);
}

serviceImpl:

@Slf4j
@Service
public class CommentServiceImpl extends ServiceImpl<CommentMapper, KbmsComment>
    implements CommentService {

    @Autowired
    CommentMapper commentMapper;

    @Autowired
    UserMapper userMapper;

    @Autowired
    IssueMapper issueMapper;

    @Autowired
    ReplyuserMapper replyuserMapper;

    @Autowired
    CommentAndReplyuserMapper commentAndReplyuserMapper;

/**
     * 获取评论列表接口
     * 1. 根据token判断是否有用户登录
     *
     * @param token
     * @param commonPort
     * @param request
     * @return
     */
    @Override
    public R CommentfindAll(String token, RequestCommonPort commonPort, HttpServletRequest request) {
        try {
            //接收参数
            String  IssueId = commonPort.getArticleid();   //文章id
            Integer page = commonPort.getPage();           //页数
            if(ObjectUtils.isEmpty(IssueId)||ObjectUtils.isEmpty(page)){
                return R.error("请求参数异常");
            }
            //查询评论信息
            List<KbmsCommentAndReplyuserVo> voArrayList = commentAndReplyuserMapper.CommentAndReplyuser(IssueId);
            voArrayList = CommentServiceImpl.FileImgURLComment(voArrayList,request);
            List<KbmsReplyuser>  replyuserList;
            for( KbmsCommentAndReplyuserVo commentAndReplyuserVo : voArrayList){
                //遍历评论,查询回复数据,封装回复集合
                QueryWrapper<KbmsReplyuser> queryWrapper = new QueryWrapper<>();
                queryWrapper.eq("comment_id",commentAndReplyuserVo.getCommentId())
                        .orderByAsc(true,"createTime");
                replyuserList = replyuserMapper.selectList(queryWrapper);
                replyuserList = CommentServiceImpl.FileImgURLReplyuser(replyuserList,request);
                commentAndReplyuserVo.setKbmsReplyusers(replyuserList);
            }
            //调用分页工具类
            Page<KbmsCommentAndReplyuserVo> pages = PageListUtils.getPages(page,10,voArrayList);
            return R.success(pages.getRecords(),"请求成功").add("length",pages.getTotal()).add("pages",pages.getPages());
//            QueryWrapper<KbmsComment> commentQueryWrapper = new QueryWrapper<>();
//            commentQueryWrapper.eq("issue_id",IssueId)
//                    .orderByDesc(true,"createTime");
//            //设置分页参数
//            Page<KbmsComment> pages = new Page<>(page, 10);
//            commentMapper.selectPage(pages, commentQueryWrapper);
//            //获取分页数据
//            List<KbmsComment> list = pages.getRecords();
//            list = CommentServiceImpl.FileImgURL(list,request);
//            return R.success(list,"请求成功").add("length",pages.getTotal()).add("pages",pages.getPages());
        }catch (Exception e) {
            e.printStackTrace();
            return R.error("请求异常");
        }
    }


    public static List<KbmsCommentAndReplyuserVo> FileImgURLComment(List<KbmsCommentAndReplyuserVo> list,HttpServletRequest request){
        for (KbmsCommentAndReplyuserVo posts:list) {
                String fileimg = posts.getAvatar();
                if(!ObjectUtils.isEmpty(fileimg)){
                    String filePath = request.getScheme() + "://" + request.getServerName()
                            + ":" + request.getServerPort()  +"/upload/"+ fileimg;
                    posts.setAvatar(filePath);
                }
        }
        return list;
    }

    public static List<KbmsReplyuser> FileImgURLReplyuser(List<KbmsReplyuser> list,HttpServletRequest request){
        for (KbmsReplyuser posts:list) {
                String fileimg = posts.getAvatar();
                if(!ObjectUtils.isEmpty(fileimg)){
                    String filePath = request.getScheme() + "://" + request.getServerName()
                            + ":" + request.getServerPort()  +"/upload/"+ fileimg;
                    posts.setAvatar(filePath);
                }
        }
        return list;
    }


}




PageListUtility 工具类:(重要)
 

public class PageListUtils {
    /**
     * 分页函数
     * @param current
     * @param size
     * @param list
     * @return
     */
    public static Page getPages(Integer current, Integer size, List<KbmsCommentAndReplyuserVo> list) {
        Page<KbmsCommentAndReplyuserVo> pages = new Page<>(current,size);
        int count = list.size();
        List<KbmsCommentAndReplyuserVo> pageList = new ArrayList<>();
        //计算当前页第一条数据的下标
        int currId = current>1 ? (current-1)*size:0;
        for (int i=0; i<size && i<count - currId;i++){
            pageList.add(list.get(currId+i));
        }
        pages.setSize(size);
        pages.setCurrent(current);
        pages.setTotal(count);
        //计算分页总页数
        pages.setPages(count %10 == 0 ? count/10 :count/10+1);
        pages.setRecords(pageList);
        return pages;
    }



}

Controller: 

    /**
     * 添加回复接口
     * @param commonPort
     * @param request
     * @return
     */
    @PostMapping("/replys/add")
    public R replysAdd(@RequestBody RequestCommonPort commonPort, HttpServletRequest request){
        String token = request.getHeader("token");
        return replyuserService.replysAdd(token,commonPort);
    }

接口测试一波:

 重要点:主要在于将查询出的list数据进行分页的操作。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值