当前位置:网站首页>6、显示评论和回复
6、显示评论和回复
2022-07-31 02:36:00 【A snicker】
1、实体类:comment
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Comment {
private int id;
private int userId;
private int entityType;
private int entityId;
private int targetId;
private String content;
private int status;
private Date createTime;
}
2、数据层
CommentMapper接口
@Mapper
public interface CommentMapper {
List<Comment> selectCommentsByEntity(int entityType, int entityId, int offset, int limit);
int selectCountByEntity(int entityType, int entityId);
}
3、业务层
@Service
public class CommentService {
@Autowired
private CommentMapper commentMapper;
public List<Comment> findCommentsByEntity(int entityType, int entityId, int offset, int limit){
return commentMapper.selectCommentsByEntity(entityType, entityId, offset, limit);
}
public int findCommentCount(int entityType, int entityId){
return commentMapper.selectCountByEntity(entityType, entityId);
}
}
4、表现层
DiscussPostController
帖子详情页,有评论,评论中有回复
注入page,post,user,comments
@RequestMapping(path = "/detail/{discussPostId}", method = RequestMethod.GET)
public String getDiscussPost(@PathVariable("discussPostId") int discussPostId, Model model, Page page) {
// 帖子
DiscussPost post = discussPostService.findDiscussPostById(discussPostId);
model.addAttribute("post", post);
// 作者
User user = userService.findUserById(post.getUserId());
model.addAttribute("user", user);
// 评论分页信息
page.setLimit(5);
page.setPath("/discuss/detail/" + discussPostId);
page.setRows(post.getCommentCount());
// 评论列表
List<Comment> commentList = commentService.findCommentsByEntity(
ENTITY_TYPE_POST, post.getId(), page.getOffset(), page.getLimit());
// 评论显示vo列表
List<Map<String, Object>> commentVoList = new ArrayList<>();
if(commentList != null){
for (Comment comment : commentList) {
Map<String, Object> commentVo = new HashMap<>();
commentVo.put("comment", comment);// 评论
commentVo.put("user", userService.findUserById(comment.getUserId()));// 作者
// 回复列表
List<Comment> replyList = commentService.findCommentsByEntity(
ENTITY_TYPE_COMMENT, comment.getId(), 0, Integer.MAX_VALUE);
// 回复显示vo列表
List<Map<String, Object>> replyVoList = new ArrayList<>();
if (replyList != null) {
for (Comment reply : replyList) {
Map<String, Object> replyVo = new HashMap<>();
replyVo.put("reply", reply);// 回复
replyVo.put("user", userService.findUserById(reply.getUserId()));// 作者
User target = reply.getTargetId() == 0 ? null : userService.findUserById(reply.getTargetId()); // 回复目标
replyVo.put("target", target);
replyVoList.add(replyVo);
}
}
commentVo.put("replys", replyVoList);
// 回复数量
int replyCount = commentService.findCommentCount(ENTITY_TYPE_COMMENT, comment.getId());
commentVo.put("replyCount", replyCount);
commentVoList.add(commentVo);
}
}
model.addAttribute("comments", commentVoList);
return "/site/discuss-detail";
}
5、增加评论(更新评论数量,事务管理)
事务管理,声明式配置(整个),编程式(部分),这里采用声明式配置。@Transactional(隔离级别、传播机制)
@Transactional(
isolation = Isolation.READ_COMMITTED,
propagation = Propagation.REQUIRED,
rollbackFor = Exception.class)
public int addComment(Comment comment){
if(comment == null){
throw new IllegalArgumentException("参数不能为空!");
}
// 添加评论
comment.setContent(HtmlUtils.htmlEscape(comment.getContent()));
comment.setContent(sensitiveFilter.filter(comment.getContent()));
int rows = commentMapper.insertComment(comment);
// 更新帖子数量
if(comment.getEntityType() == ENTITY_TYPE_POST){
int count =
commentMapper.selectCountByEntity(comment.getEntityType(), comment.getEntityId());
discussPostService.updateCommentCount(comment.getEntityId(), count);
}
return rows;
}
边栏推荐
- Nacos
- Brute Force/Adjacency Matrix Breadth First Directed Weighted Graph Undirected Weighted Graph
- 图解lower_bound&upper_bound
- User interaction + formatted output
- The Sad History of Image Processing Technology
- SQL注入 Less47(报错注入) 和Less49(时间盲注)
- LeetCode Daily Question 2022/7/25-2022/7/31
- 跨专业考研难度大?“上岸”成功率低?这份实用攻略请收下!
- The principle of complete replication of virtual machines (cloud computing)
- Unity3D Button 鼠标悬浮进入与鼠标悬浮退出按钮事件
猜你喜欢
MPPT太阳能充放电控制器数据采集-通过网关采集电池电压容量电量SOC,wifi传输
STM32CUBEMX develops GD32F303 (11) ---- ADC scans multiple channels in DMA mode
1. Non-type template parameters 2. Specialization of templates 3. Explanation of inheritance
Fiddler captures packets to simulate weak network environment testing
基于FPGA的售货机
The comprehensive result of the case statement, do you know it?[Verilog Advanced Tutorial]
Teach you how to configure Jenkins automated email notifications
Difference between CMOS and TTL?
Linux下redis7的安装,启动与停止
AI在医疗影像设备全流程应用
随机推荐
The comprehensive result of the case statement, do you know it?[Verilog Advanced Tutorial]
golang GUI for nuxui — HelloWorld
The difference between link and @import
mysql index
Classic linked list OJ strong training problem - fast and slow double pointer efficient solution
vlan间路由+静态路由+NAT(PAT+静态NAT)综合实验
SQL注入 Less47(报错注入) 和Less49(时间盲注)
[1153]mysql中between的边界范围
全流程调度——MySQL与Sqoop
Drools basic introduction, introductory case, basic syntax
SQL注入 Less54(限制次数的SQL注入+union注入)
真正的CTO,是一个懂产品的技术人
SQL注入 Less46(order by后的注入+rand()布尔盲注)
医疗影像领域AI软件开发流程
验证整数输入
二层广播风暴(产生原因+判断+解决)
cudaMemcpy学习笔记
Mathematics to solve the problem - circular linked list
f.grid_sample
Fiddler captures packets to simulate weak network environment testing