发表于: 2021-02-05 23:38:48
1 1146
今天完成的事情:
写留言的回复
明天计划的事情:
遇到的问题:
收获:
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、父留言id为0、上下架状态,查询父留言
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测试:
数据表:
评论