发表于: 2021-02-05 23:38:48

1 1149


今天完成的事情:

写留言的回复


明天计划的事情:




遇到的问题:




收获:

SQL语句:

<!-- 前台,查询全部类容 -->
<select id="selectAll" parameterType="Map" resultMap="BaseResultMap">
 select
<include refid="Base_Column_List" />
 from message where work_id = #{workId,jdbcType=BIGINT} and status = #{status,jdbcType=BIT} and reply_id = #{replyId,jdbcType=BIGINT} = 0
order by message.created_time desc
</select>



<select id="selectReplyByReplyId" parameterType="java.lang.Long" resultMap="BaseResultMap">
     select * from message
where reply_id = #{replyId,jdbcType=BIGINT}
</select>

工具类:

package com.kbk.util;

import com.kbk.model.Message;
import com.kbk.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;

// 将该类实例化到spring容器
@Component
public class MessageUtil {


@Autowired
   private MessageService messageService;

   public static MessageUtil messageUtil;

   // 该注解是servlet中的一个生命周期环节,被修饰的方法会在构造函数之后被执行
   @PostConstruct
   public void init(){
messageUtil = this;
   }

// 根据传入的service、父留言、装载回复的集合,递归查询所有回复
   public static void findReplyByMessageId(Message message,
                                           List<Message> replies) {
// 根据父留言id,查询所有回复
       List<Message> replyList = messageUtil.messageService.selectReplyByReplyId(message.getId());
       // 遍历所有回复
       for (Message reply : replyList) {
// 将回复依次加入父留言的回复集合
           replies.add(reply);
           // 创建回复的装载下级回复的集合
           List<Message> list = new ArrayList<>();
           // 设置回复装载下级回复的集合
           reply.setReplies(list);
           // 递归查询,根据回复id,查询下一级回复,再依次装入集合
           findReplyByMessageId(reply,list);
       }
}
}

Controller:

// 根据作品id查询对应的留言、回复,递归遍历,前端返回作品id
@RequestMapping(value = "/api/message/{workId}",method = RequestMethod.GET)
@ResponseBody
public Map<String,Object> selectMessageByWorkId(@PathVariable(value = "workId") Integer workId){
Map<String,Object> map = new HashMap<>();
   map.put("workId",workId);
   map.put("replyId",0);
   map.put("status",0);
   // 根据作品id、父留言id0、上下架状态,查询父留言
   List<Message> messages = messageService.selectAll(map);
   // 遍历所有父留言
   for (Message message : messages) {
// 创建父留言的装载下级回复的集合
       List<Message> replies = new ArrayList<>();
       // 设置父留言装载下级回复的集合
       message.setReplies(replies);
       // 调用util类方法,根据父留言id查询对应的子回复集合,递归遍历
       MessageUtil.findReplyByMessageId(message,replies);
   }


// 判断list集合不为空,且集合内元素不为空
   if (messages != null && !messages.isEmpty()){
return Restful.set(200, "查询成功", messages);
   }else {
return Restful.set(404,"查询失败");
   }

}

POSTman测试:

数据表:



返回列表 返回列表
评论

    分享到