mybatis+spirngmvc实现二级评论

二级评论关键思路

添加:一级评论父id设为-1,二级评论的父评论父id不为-1的话,则将二级评论设为父评论的父id(听起来有点绕口,其实就是将所有二级评论的父id都设置为一级评论的id)。
查询:使用分布查询,先查出页面上的父评论,再使用分步查询(使用连表应该也可以实现,笔者学艺不精,有能力可以多探索探索)查出父评论下的子评论。

注意

查询二级评论时子查询的resultmap不能使用父评论查询的resultmap,不然会陷入循环导致栈溢出。

评论实体类

@ApiModel("评论实体类")
public class Comment {
    @ApiModelProperty("主键自增")
    private Integer id;
    @ApiModelProperty("用户id")
    private Integer userId;
    @ApiModelProperty("评论内容")
    private String content;
    @ApiModelProperty("评论时间")
    private String createTime;

    @ApiModelProperty("父级评论id,没有父级评论的话则为-1")
    private Integer fatherId;
    @ApiModelProperty("子集评论集合")
    private List<Comment> comments;
}

使用用户id查出相对应的用户信息展示到页面上,在这个实体类的基础上可以增加页面id用来标识该评论所在的页面。

代码实现

service层

//添加评论
@Override
    public Result addComment(Comment comment) {
        Result result = new Result();
        //将二级评论的所有父id都转为一级评论的id
        if(comment.getFatherId()!=-1){
            int fatherIdById = commentMapper.getFatherIdById(comment.getFatherId());
            if(fatherIdById!=-1){
                comment.setFatherId(fatherIdById);
            }
        }
        //查询用户是否存在
        User user = userMapper.searchUserById(comment.getUserId());
        if(user==null){
            result.setCode(Code.ADD_ERR);
            result.setMsg("add error!the user is not exist!");
            return result;
        }
        //初始化评论对象
        comment = new Comment(comment,DateUtil.getCurrentDateString(new Date()),user.getNickname(),user.getPicture(),user.getLocation());
        //持久层添加评论
        commentMapper.addComment(comment);
        result.setData("comment");
        result.setMsg("add success!");
        result.setCode(Code.ADD_OK);
        return result;
    }
    //查询评论
    @Override
    public Result getComment(int type , int typeId){
        Result result = new Result();
        List<Comment> comment = commentMapper.getComment(type, typeId);
        result.setCode(Code.GET_OK);
        result.setMsg("get success!");
        result.setData(comment);
        return result;
    }
	//删除评论
    @Override
    public Result deleteComment(int commentId) {
        Result result = new Result();
        if(commentMapper.deleteCommentById(commentId)>0){
            result.setCode(Code.DELETE_OK);
            result.setMsg("delete success!");
        }else{
            result.setCode(Code.DELETE_ERR);
            result.setMsg("delete error!the result number is zero!");
        }
        return result;
    }

mapper层


	<select id="getFatherIdById" resultType="integer">
   		 select father_id from comment where id = #{id};
	</select>

    <insert id="addComment" useGeneratedKeys="true" keyProperty="id">
        insert into comment (type, type_id, user_id, content, create_time, nickname, user_picture, location, father_id)
        values (#{type} ,#{typeId} , #{userId} , #{content} , #{createTime} , #{nickname} , #{userPicture} , #{location} , #{fatherId})
    </insert>

    <select id="getComment" resultMap="Comment">
        select * from comment where type = #{type} and type_id = #{typeId} and father_id = -1;
    </select>

    <select id="getChildComment" resultType="net.wlgzs.core.entity.Comment">
        select * from comment where father_id = #{id};
    </select>

    <delete id="deleteCommentById">
        delete  from comment where id = #{commentId} or father_id = #{commentId};
    </delete>

效果展示:

在这里插入图片描述

总结

二级评论思路其实并不难,多摸索就能学会。学习一门编程语言最好的方法还是直接上手敲代码,纸上谈兵不可取。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值