仿牛客網項目---顯示評論和添加評論功能的實現

這篇文章,我來介紹一下我的項目中的另外一個功能:顯示評論和添加評論。

其實這兩個功能都不怎么重要,我感覺最重要的應該是用戶注冊登錄功能,這個也了解一下,知道這么一回事兒就好。

首先設計DAO層。

@Mapper
public interface CommentMapper {List<Comment> selectCommentsByEntity(int entityType, int entityId, int offset, int limit);//根據實體類型、實體ID以及分頁偏移量和限制數量,查詢對應實體的評論列表,并返回一個評論對象的列表int selectCountByEntity(int entityType, int entityId);//根據實體類型和實體ID,查詢對應實體的評論數量,并返回結果int insertComment(Comment comment);//插入一條評論記錄到數據庫中,參數為一個評論對象Comment selectCommentById(int id);//根據評論ID,查詢并返回對應的評論對象}

這些方法用于對評論表進行常見的數據庫操作,例如查詢某個實體的評論列表、查詢評論數量、插入評論以及根據評論ID查詢評論詳情。

?

再來設計service層。

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);}@Transactional(isolation = Isolation.READ_COMMITTED, propagation = Propagation.REQUIRED)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;}public Comment findCommentById(int id) {return commentMapper.selectCommentById(id);}

上面的代碼是一個評論服務類,用于處理與評論相關的業務邏輯。

findCommentCount()?方法用于根據實體類型和實體ID,調用?commentMapper.selectCountByEntity()?方法查詢對應實體的評論數量,并返回結果。

addComment()?方法用于添加一條評論。在方法中,首先對評論內容進行處理,使用?HtmlUtils.htmlEscape()?方法進行 HTML 轉義,以防止 XSS 攻擊,然后使用?sensitiveFilter.filter()?方法過濾敏感詞。接下來調用?commentMapper.insertComment()?方法將評論插入到數據庫中。

findCommentById()?方法用于根據評論ID查詢對應的評論對象,調用?commentMapper.selectCommentById()?方法進行查詢,并返回結果。

這些方法結合了評論數據庫訪問對象(DAO)的方法,處理評論的查詢、添加和統計等業務邏輯,并且在添加評論時還會更新帖子的評論數量。

最后寫controller層。

 public String addComment(@PathVariable("discussPostId") int discussPostId, Comment comment) {comment.setUserId(hostHolder.getUser().getId());comment.setStatus(0);comment.setCreateTime(new Date());commentService.addComment(comment);// 觸發評論事件Event event = new Event().setTopic(TOPIC_COMMENT).setUserId(hostHolder.getUser().getId()).setEntityType(comment.getEntityType()).setEntityId(comment.getEntityId()).setData("postId", discussPostId);if (comment.getEntityType() == ENTITY_TYPE_POST) {DiscussPost target = discussPostService.findDiscussPostById(comment.getEntityId());event.setEntityUserId(target.getUserId());} else if (comment.getEntityType() == ENTITY_TYPE_COMMENT) {Comment target = commentService.findCommentById(comment.getEntityId());event.setEntityUserId(target.getUserId());}eventProducer.fireEvent(event);if (comment.getEntityType() == ENTITY_TYPE_POST) {// 觸發發帖事件event = new Event().setTopic(TOPIC_PUBLISH).setUserId(comment.getUserId()).setEntityType(ENTITY_TYPE_POST).setEntityId(discussPostId);eventProducer.fireEvent(event);// 計算帖子分數String redisKey = RedisKeyUtil.getPostScoreKey();redisTemplate.opsForSet().add(redisKey, discussPostId);}return "redirect:/discuss/detail/" + discussPostId;}}

在方法體中,首先設置評論的用戶ID為當前登錄用戶的ID,評論的狀態為0(表示正常狀態),創建時間為當前時間。然后調用?commentService.addComment()?方法將評論添加到數據庫中。

接下來,根據評論的實體類型(帖子或評論),創建一個事件對象?event,設置事件的相關屬性,例如話題(topic)、用戶ID、實體類型、實體ID等。如果評論的實體類型是帖子,則還會獲取該帖子的作者ID,如果是評論,則獲取評論的目標對象(評論的回復對象)的作者ID。

最后,返回一個重定向的視圖,將頁面重定向到帖子詳情頁,以展示添加評論后的頁面效果。

這就是顯示評論和添加評論的功能。簡單了解一下既可!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712284.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712284.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712284.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python實現AES加密解密

1. 前言 AES是一種對稱加密&#xff0c;所謂對稱加密就是加密與解密使用的秘鑰是一個。 之前寫過一片關于python AES加密解密的文章&#xff0c;但是這里面細節實在很多&#xff0c;這次我從 參數類型、加密模式、編碼模式、補全模式、等等方面 系統的說明如何使用AES加密解密…

直觀理解卷積

卷積直觀理解 原文來自最容易理解的對卷積(convolution)的解釋 &#x1f3ac;個人簡介&#xff1a;一個全棧工程師的升級之路&#xff01; &#x1f4cb;個人專欄&#xff1a;計算機雜記 &#x1f380;CSDN主頁 發狂的小花 &#x1f304;人生秘訣&#xff1a;學習的本質就是極致…

從經典學習 NLP:小白到大白:1. Word Tokenization

文章目錄 1 Word Tokenization1.1 Top-down/rule-based tokenization1.2 Byte-pair Encoding: A Bottom-up tokenization algorithm 1 Word Tokenization 來源&#xff1a;JM3 Chapter 2.5 p19-23 tokenization 就是 把 running text 分割成為 words&#xff1b; 常有兩種方…

AVL 樹

AVL樹的概念 二叉搜索樹雖可以縮短查找的效率&#xff0c;但如果數據有序或接近有序二叉搜索樹將退化為單支樹&#xff0c;查找元素相當于在順序表中搜索元素&#xff0c;效率低下。因此&#xff0c;兩位俄羅斯的數學家G.M.Adelson-Velskii和E.M.Landis在1962年 發明了一種解決…

k8s筆記26--快速實現prometheus監控harbor

k8s筆記26--快速實現prometheus監控harbor 簡介采集指標&配置grafana面板采集指標配置grafana面板 說明 簡介 harbor是當前最流行的開源容器鏡像倉庫項目&#xff0c;被大量IT團隊廣泛應用于生產、測試環境的項目中。本文基于Harbor、Prometheus、Grafana介紹快速實現監控…

3. 臺階問題

數樓梯 題目描述 樓梯有 N N N 階&#xff0c;上樓可以一步上一階&#xff0c;也可以一步上二階。 編一個程序&#xff0c;計算共有多少種不同的走法。 輸入格式 一個數字&#xff0c;樓梯數。 輸出格式 輸出走的方式總數。 樣例 #1 樣例輸入 #1 4樣例輸出 #1 5提示…

FPGA之帶有進位邏輯的加法運算

module ADDER&#xff08; input [5&#xff1a;0]A&#xff0c; input [5&#xff1a;0]B&#xff0c;output[6&#xff1a;0]Q &#xff09;&#xff1b; assign Q AB&#xff1b; endmodule 綜合結果如下圖所示&#xff1a; 使用了6個Lut&#xff0c;&#xff0c;6個LUT分布…

詳細介紹如何用windows11自帶Hyper-V安裝虛擬機

通過系統自帶的hyper-v安裝windows11&#xff0c;舒服又愜意&#xff0c;相比用第三方虛擬機軟件速度快很多。 硬件準備 1、對于電腦自帶的虛擬機Hyper-V&#xff0c;不是每種電腦系統版本都帶著的。我們先要確定您的系統符合 Hyper-V 的最低要求。我們跟著下面的步驟來執行&…

鴻蒙開發相關知識(四)【數據持久化(用戶首選項、關系型數據庫)、通知(基礎通知、進度條通知、通知意圖)】

文章目錄 一、數據持久化1、用戶首選項&#xff08;1&#xff09;語法說明&#xff08;2&#xff09;完整代碼示例 2、關系型數據庫&#xff08;1&#xff09;初始化數據庫&#xff08;2&#xff09;增刪改數據&#xff08;3&#xff09;查詢數據&#xff08;4&#xff09;完整…

《2023年勒索軟件攻擊態勢報告》

獲取方式&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1zd-yVsuGwJADyyGNFR_TIQ?pwd2lo0 提取碼&#xff1a;2lo0

探索數據結構:解鎖計算世界的密碼

?? 歡迎大家來到貝蒂大講堂?? &#x1f388;&#x1f388;養成好習慣&#xff0c;先贊后看哦~&#x1f388;&#x1f388; 所屬專欄&#xff1a;數據結構與算法 貝蒂的主頁&#xff1a;Betty‘s blog 前言 隨著應用程序變得越來越復雜和數據越來越豐富&#xff0c;幾百萬、…

600萬訂單每秒Disruptor +SpringBoot,如何解決消息不丟失?

尼恩說在前面 在40歲老架構師 尼恩的讀者交流群(50)中&#xff0c;最近有小伙伴拿到了一線互聯網企業如得物、阿里、滴滴、極兔、有贊、shein 希音、百度、網易的面試資格&#xff0c;遇到很多很重要的面試題&#xff1a; Disruptor 官方說能達到每秒600w OPS訂單處理能力&…

Java——Object

1.Object萬類之祖 1.1 Object類型的概述 Object類是所有類型的頂層父類&#xff0c;所有類型的直接或者間接的父類&#xff1b;所有的類型中都含有Object類中的所有方法。 隨意定義一個類型,不手動顯式定義其父類&#xff0c;那么這個類的父類就是Object類 public Object() …

【C語言】指針初階2.0版本

這篇博文我們來繼續學習指針的其他內容 指針2.0 傳值調用與傳址調用傳值調用傳址調用 一維數組與指針理解數組名使用指針深入理解一維數組 二級指針指針數組二維數組與指針 傳值調用與傳址調用 在開始之前&#xff0c;我們需要先了解這個概念&#xff0c;后面才能夠正常的學習…

利用 Python 抓取數據探索汽車市場趨勢

一、引言 隨著全球對環境保護意識的增強和技術的進步&#xff0c;新能源汽車作為一種環保、高效的交通工具&#xff0c;正逐漸受到人們的關注和青睞。在這個背景下&#xff0c;對汽車市場的數據進行分析和研究顯得尤為重要。 本文將介紹如何利用 Python 編程語言&#xff0c;結…

VSCode上搭建C/C++開發環境(vscode配置c/c++環境)Windows系統---保姆級教程

引言勸退 VSCode&#xff0c;全稱為Visual Studio Code&#xff0c;是由微軟開發的一款輕量級&#xff0c;跨平臺的代碼編輯器。大家能來搜用VSCode配置c/c&#xff0c;想必也知道VSCode的強大&#xff0c;可以手握一個VSCode同時編寫如C&#xff0c;C&#xff0c;C#&#xff…

微服務day02-Ribbon負載均衡與Nacos安裝與入門

一.Ribbon負載均衡 在上一節中&#xff0c;我們通過在RestTemplte實例中加上了注解 LoadBalanced,表示將來由RestTemplate發起的請求會被Ribbon攔截和處理&#xff0c;實現了訪問服務時的負載均衡&#xff0c;那么他是如何實現的呢&#xff1f; 1.1 Ribbon負載均衡的原理 Rib…

鏈表的歸并排序-LeetCode(Python版)

雙指針歸并排序&#xff01;圖解排序鏈表&#xff01;-知乎 class ListNode(object):def __init__(self, val0, nextNone):self.val valself.next nextclass Solution(object):def find_mid(self, head): # 快慢指針slow, fast head, headwhile fast.next and fast.next.n…

linux 硬盤存儲剩余容量自動化監控+報警通知

linux 硬盤存儲剩余容量自動化監控報警通知 編寫shell腳本 #!/bin/bash# 獲取系統存儲大小&#xff08;單位為GB&#xff09; storage_size$(df -h / | awk NR2 {print $4} | sed s/G//)# 閾值&#xff08;小于10GB觸發報警&#xff09; threshold10# 釘釘機器人 Webhook UR…

LabVIEW非接觸式電阻抗層析成像系統

LabVIEW非接觸式電阻抗層析成像系統 非接觸式電阻抗層析成像&#xff08;NEIT&#xff09;技術以其無輻射、非接觸、響應速度快的特點&#xff0c;為實時監測提供了新的解決方案。基于LabVIEW的電阻抗層析成像系統&#xff0c;實現了數據的在線采集及實時成像&#xff0c;提高…