当前位置:网站首页>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;
}
边栏推荐
- Pythagorean tuple od js
- 静态路由+PAT+静态NAT(讲解+实验)
- f.grid_sample
- Inner monologue from a female test engineer...
- Problems that need to be solved by the tcp framework
- User interaction + formatted output
- mysql 索引
- The application of AI in the whole process of medical imaging equipment
- [1153] The boundary range of between in mysql
- Drools基本介绍,入门案例,基本语法
猜你喜欢
Drools规则属性,高级语法
STM32CUBEMX开发GD32F303(11)----ADC在DMA模式下扫描多个通道
你们程序员为什么不靠自己的项目谋生?而必须为其他人打工?
mmdetection trains a model related command
MPPT太阳能充放电控制器数据采集-通过网关采集电池电压容量电量SOC,wifi传输
数学解决——环形链表问题
The real CTO is a technical person who understands products
Problems that need to be solved by the tcp framework
Linux下redis7的安装,启动与停止
Introduction and use of Drools WorkBench
随机推荐
英特尔软硬优化,赋能东软加速智慧医疗时代到来
【Android】Room —— SQLite的替代品
Coldfusion file read holes (CVE - 2010-2861)
Android's webview cache related knowledge collection
BAT卖不动「医疗云」:医院逃离、山头林立、行有行规
Fiddler captures packets to simulate weak network environment testing
LeetCode Daily Question 2022/7/25-2022/7/31
Software testing basic interface testing - getting started with Jmeter, you should pay attention to these things
【银行系列第一期】中国人民银行
tcp框架需要解决的问题
mmdetection训练一个模型相关命令
Classic linked list OJ strong training problem - fast and slow double pointer efficient solution
STP选举(步骤+案列)详解
The real CTO is a technical person who understands products
CorelDRAW2022精简亚太新增功能详细介绍
全流程调度——MySQL与Sqoop
CentOS7下mysql5.7.37的卸载【完美方案】
Word/Excel fixed table size, when filling in the content, the table does not change with the cell content
基于FPGA的图像实时采集
Mathematical Ideas in AI