从零开始写项目第五篇【评论功能、备忘录】

评论回复功能的实现 最后的效果图如上,大家不难发现这个回复的想法和知乎的回复模式差不多(因为我就是照着那个思路实现的 :) ),只是这里少实现了查看对话的功能。下面说说我实现这个过程中遇到的一些困难。 首先讲讲我的数据库的实现: RId指的是每个评论的唯一id,这个R取得是review(评论)的意思 RTId指的是每条帖子的id RRId指的是被回复的评论的id,如果有就是其id,无为0 ... 阅读详情

评论功能资料

在网页上评论功能并不少见,我也想在自己的网站中增加评论功能,好让知道别人对我的网站的看法,还能让别人提醒我哪里出错了。

于是我就去寻找对应的资料去了,之前对评论功能并没有了解过….

以下这个博主认为评论可以分为三种类型:

http://blog.youkuaiyun.com/u010098331/article/details/51447144?locationNum=5&fps=1

  • 将回复和评论都统一当成是评论,能够使用@XXX来当做是回复,类似与IOS知乎的评论【此做法是最简单的】

  • 将回复和评论分开,要么单表就多增加一个父属性,要么就分两张表【稍微复杂,一个评论可以对应多个回复】

  • 实现评论与回复“盖楼”的方式,这种就是网易的评论【具体可看下面的博文,此种是最复杂的】

这位博主给出了相关的设计数据库过程,我觉得非常好,受益良多

而这位博主就是针对上面所说的第一种情况做的评论功能:

http://blog.youkuaiyun.com/yums467/article/details/50749968

  • 有对应的前端样式,数据库设计,PHP后台的实现

下面这位博主就给出了在设计评论功能时的总结以及github代码:

http://blog.youkuaiyun.com/muzili12a3/article/details/54695426

着手开发

有了上面的基本知识,就可以着手开发属于自己的评论功能了。我就选择最简单的那种就好咯,单表设计。

集合上面的知识,我设计了一张数据库表

640?wx_fmt=png

可以说是设计得非常简单,因为我的目的就是为了能够让别人在我的网站下留言而已。如果需要的话,以后再弄“盖楼”或者真正可以回复那种方式吧。。

有了数据库表的设计,其实Controller、Dao层那里的代码就没什么难度了,重点就是在页面设计上…….(对我来说还是有点难)…

个人备忘录编写

之前就想做个人备忘录这个功能的了,本来是想用“手机短信”的方式来提示用户设置了备忘录的。后来去找手机短信SDK的时候又觉得要钱,还得与当前账户联系起来,就觉得没啥必要。就直接使用邮箱了(因为我的账户体系本来就是用邮箱的)

既然是用户设置时间、发邮件提示,那么我第一时间想到的是Quartz任务定时调度框架…

后来,觉得当前的Quartz的知识不足够我去写这么一个功能,于是就去找资料重新学了一下Quartz:https://zhongfucheng.bitcron.com/post/javaee/javading-shi-ren-wu-diao-du-gong-ju

当然了,在开发的过程中也遇到了不少的bug:

  • 在Junit测试Quartz没有反应

  • Spring不能注入对象进Quartz的Job类中

这些bug也不是一下子就能定位出来的,花了我不少时间,上面所说问题的解决方案:

https://zhongfucheng.bitcron.com/post/javaee/quartzye-wu-lei-wu-fa-zhu-ru-springdui-xiang-wen-ti

https://zhongfucheng.bitcron.com/post/javaee/junitce-shi-quartzwu-fan-ying-jie-jue-cuo-wu

在时间选择器上,本来想是使用wdatepicker这个组件的,后来发现与网站的样式不太匹配,最后选择了bootstrap的datepicker。

datePicker教程:http://www.bootcss.com/p/bootstrap-datetimepicker/

Quartz入门教程:http://www.cnblogs.com/xrab/p/5850186.html
Quartz进阶:https://www.dexcoder.com/selfly/article/308?curPage=7#comment和http://blog.youkuaiyun.com/jianging2009/article/details/54020399

Date对象转成Cron表达式:http://blog.youkuaiyun.com/u010046887/article/details/50818124

上面Quartz的进阶是我当时想动态修改Quartz触发器的时间的..不过没有用到那个技术..

后来还看了一下Spring自带的任务调度,觉得如果以后逻辑方便的话,这个使用起来也是很简单的:http://blog.youkuaiyun.com/u010648555/article/details/52162840

Quartz一般都是按某个时间来进行调度,使用Spring整合起来是很方便的。可是我的业务是:用户设置在某个时间点来进行调度,调度以后即不再调用了。

最后我选择自己编写Job、自己编写Trigger的方式来进行调度…我觉得这种方式虽然代码是多一点,但是灵活很多!

如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y


新手软件测试实战:从理论到项目的12个黄金练习方案 软件测试是确保软件质量的关键环节,其核心在于通过系统化的方法验证软件功能、性能及安全性是否符合预期。测试原理涵盖从需求分析、用例设计到缺陷管理的完整生命周期。掌握测试技术不仅能提升软件可靠性,更是软件工程师和测试工程师的核心竞争力,广泛应用于Web、移动端、API及各类应用场景。对于初学者而言,最大的挑战往往在于如何将测试理论转化为动手能力。本文聚焦【项目实践】与【测试思维】,提供一系列目标明确、资源易得的实战项目,如OrangeHRM、Sauce Demo等,帮助新手在安全的“练习场”中,将测试计划、用例 阅读详情

相关推荐

不只是备忘录!用memos搭建你的私人知识库+轻社交平台(完整Docker部署指南)

本文详细介绍了如何使用Docker部署开源自托管工具memos,打造个人知识库与轻社交平台。从环境准备到高性能配置,再到安全加固与性能优化,提供全流程实践指南,帮助用户高效管理碎片化知识并实现数据自主。

weixin_30832143的博客 267

Eclipse图解

eclipse图解: 功能(Functions): 内置运行java程序的插件(JDT:java develop tools) 工作集(WorkSet) (Task list)计划任务管理器(Mylyn) 系统配置(Preferences) 透视图(常用窗口的组合)(Perspective) web tools platform (web开发平台)(Web Developer) ...

王亦 239

自建影视评分系统Ratelog:基于Docker与TMDB API的私有化部署指南

在数据隐私与自主权日益受到重视的今天,自托管服务成为技术爱好者与资深用户的重要选择。其核心原理在于将应用部署在用户可控的服务器或本地设备上,实现数据的私有化存储与管理。这种模式的技术价值在于彻底摆脱对第三方平台的依赖,保障数据的永久可用性与安全性。在影视记录与管理的应用场景中,自托管方案能够完美结合个人数据主权与专业影视数据库的丰富性。本文聚焦于开源项目Ratelog,它通过Docker容器化技术,集成TMDB影视数据库API,构建了一个功能完整的个人影视评分与日志系统。该系统允许用户完全掌控自己的观影记录

weixin_31856057的博客 319

mysql制作评论功能_Java+MySQL实现评论功能设计开发

Java+MySQL实现评论功能设计开发一、背景项目初始版本上线,有时间写点东西记录一下项目中的心得体会,通过这个项目学习了很多,要写下来的有很多,先从评论功能开始吧。由于项目需要增加评论功能,之前并无此方面的经验,因此项目开始的一段时间都在寻思着如何进行评论功能的设计。上网搜索一波发现有很多优秀的第三方评论插件可以使用,本来准备直接采用的,但是心里始终有点疙瘩,可能是评论数据放在别人那里不放心的...

weixin_42601702的博客 1627

Hermes Agent 介绍与核心功能详解

Hermes Agent 介绍与核心功能详解

简简单单Onlinezuozuo 293

从AMCL到SLAM Toolbox:在Nav2中实现高精度纯定位的实践指南

本文详细介绍了从AMCL迁移到SLAM Toolbox纯定位模式的实践指南,帮助开发者在Nav2中实现高精度定位。通过对比AMCL与SLAM Toolbox的性能差异,提供环境配置、参数调优、Nav2集成等关键步骤,显著提升机器人在动态环境中的定位精度和重定位效率。

weixin_29292535的博客 148

从零开始写项目【总结】

从零开发项目概述最近这一直在复习数据结构和算法,也就是前面发出去的排序算法八大基础排序总结,Java实现单向链表,栈和队列就是这么简单,十道简单算法题等等…被虐得不要不要...

3y 1134

解决MATLAB2020B关于找不到vs2019C++编译器问题

解决MATLAB2020B关于找不到vs2019C++编译器问题

wcm2577的博客 7606

【Java EE】从零开始写项目【总结】

从零开发项目概述 最近这一直在复习数据结构和算法,也就是前面发出去的排序算法八大基础排序总结,Java实现单向链表,栈和队列就是这么简单,十道简单算法题等等… 被虐得不要不要的,即使是非常简单有时候绕半天,想不明白。 本来这篇博文是想留到我最后Java基础复习完再写出来的,鉴于公众号有的同学想看看邮箱登陆的案例,想看看Java开发后台是怎么的,于是我就提前写了这篇博文 这个项目是我自己手写...

3y 1009

LVGL与STM32的理解(基于正点原子资料)

我们要在lcd_draw_fast_rgb_color里面实现对屏的具体操作(也就是在这里实现自己的代码)。lcd_set_window、lcd_write_ram_prepare、lcd_wr_data这三个函数是本例程LCD屏的控制函数(也就是自己写的函数)。以下是stm32工程的文件目录,GUI_APP也可以忽略(细节参考正点原子例程):这里主要是再次加强一下印象,主要就是把。,里面的lcd_init()与lcd_display_dir是。它们都是LVGL的接口,按照它们的需求,把内容给它们即可。

weixin_39257775的博客 3437

告别交越失真:手把手教你设计高性能互补输出级电路(LTspice实测)

本文深入剖析音频放大器中常见的交越失真问题,并提供基于LTspice仿真的实战解决方案。通过对比二极管偏置、Vbe倍增器和集成运放驱动三种经典方案,手把手指导设计高性能互补输出级电路,涵盖原理分析、仿真验证及实物调试要点,助力消除音频失真,提升音质。

weixin_29190573的博客 552

easyx 备忘录_备忘录里的小故事

ji lu记 录大概是每个人都会去做的事情有的人用镜头记录下一个个闪光的瞬间有的人用画笔细心描绘记录出内心的风景有的人用社交软件分享记录丰富的日常有的人用日记手账拼贴记录出自己的生活……然而在这个生活节奏加快的日子里 更多的人选择用手机备忘录记录下这一点一滴记录目标01在计划里打下一个又一个勾勾就好像在心里一点点堆积向前走的力量当所有的对勾都被勾勒出来的时候向前走的决心就更强了离目标更...

weixin_39593247的博客 96

【超详细】MIT 液态神经网络(LNNs)——深度学习新动向

输入可以是任何形式的时间序列数据,其中表示时间。例如传感器读数、金融市场数据、语音信号等。

allein_STR的博客 2611

从零搭建个人知识库:一位项目管理者的实战经验与避坑指南

作为一名项目管理者和内容创作者,我曾以为“工具即效率”——直到用本地部署的 DeepSeek 和 Anything LLM 搭建个人知识库时,才意识到:效率提升不仅是技术问题,更是管理思维的挑战。于是,在身边技术大牛的同事影响下,我决定自己也来用 DeepSeek(本地部署)+ Anything LLM 搭建一个隐私安全、风格可控、自动化管理的个人知识库系统。“你花三个月调模型,不如等半年后的自动化工具。——隔壁工位技术宅老朱”不足:增加使用各类工具的学习成本,且工具大部分不是国内工具,付费,语言不通。

weixin_43650106的博客 2228

【STM32项目】基于STM32设计的震动马达超声波电机高频震动——高级定时器PWM互补输出带死区控制__资料编号3

实现高级定时器互补输出带死区控制,实现震动/超声波电机/马达,高频震动。使用 STM32F103 芯片输出两路互补 PWM,并带有死区和刹车控制功能。定时器 1 通道 1 及其互补通道输出PWM,且带死区控。当定时器 1 的刹车输入引脚被拉高时,产生刹车时间,即定时器 8 停止输出 PWM。当刹车输入引脚被拉高时,通道 1 和通道 2 将从有波形输入状态转换成无效电平状态。

嵌入式阿齐Archie 6742

uniapp - 解决报错 TypeError: e[t] is not a function(Uniapp项目运行或打包编译时提示错误e[t] is not a function,全平台端均可搞定)

uniapp,报错,TypeError: e[t] is not a function,uniapp App端报错,Android端,苹果ios打包报错,运行报错,uniapp打包报错e[t] is not a function,无法运行提示错误,uniapp live-pusher直播推流,maps地图组件,uni-app live-pusher 报错TypeError: e[t] is not a function,uni-app maps报错TypeError: e[t] is not a funct

✅ 精选推荐文章 8222

【完结】囚生CYの备忘录(20230822~20231012)

阳の言

梦想破三的奔三狗 1万+

论文阅读:Universal and Transferable Adversarial Attacks on Aligned Language Models. LLM Attacks

因为“即开即用”的大型语言模型能够生成大量令人反感的内容,近期的工作集中在对这些模型进行对齐,以防止不受欢迎的生成。尽管在规避这些措施方面取得了一些成功——即所谓的针对大型语言模型(LLMs)的“越狱”——这些攻击需要大量的人类智慧,并且在实践中很脆弱。自动对抗性提示生成的尝试也取得了有限的成功。在本文中,我们提出了一种简单有效的攻击方法,可以导致对齐的语言模型生成令人反感的行为。

CSPhD-winston的博客 1418

AI时代如何用“灵感回路”系统化捕捉与验证项目创意

在信息过载与AI工具层出不穷的时代,真正的瓶颈往往不是技术实现,而是如何持续获得值得投入的创意。灵感回路(IdeaLoop)是一种将灵感输入、筛选、验证与经验沉淀形成闭环的方法论,它通过固定日期日报、结构化筛选清单与可追溯的复盘机制,帮助独立开发者和副业人群把随机想法转化为可执行、可验证的项目方向。本文从信息处理的基本原理出发,探讨如何借助轻量级工具,如备忘录、Markdown笔记和每日灵感Agent,搭建一套每天30分钟的灵感管理系统。通过持续追踪、需求验证与经验回填,让每一次判断比上一次更准确。该框架尤

weixin_30252709的博客 331

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HTTP Server:从头开始构建简单HTTP服务器需要了解的所有内容

文章翻译至: HTTP Server: Everything you need to know to Build a simple HTTP server from scratch HTTP无处不在! 我们访问的每个网站都在HTTP服务器上运行。 您可能会说还有HTTPS服务器。 从技术上讲,HTTPS与HTTP相同,只是HTTPS具有更高的安全性。 许多程序员可能会对HTTP服务器的工作原理以及...

aboutmn的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

列完大纲反而写不动了?如何从“完美的计划“切换到“真正的写作”

三年里唯一反复想的,是结局——“大雪。山门前石阶半尺积雪。他穿着洗得发白的灰布长衫,背着一把没开过刃的铁剑站在那里。雪落肩上,他不抖。想起师父临死前的话——'这门派传到你这儿,想关就关了吧,没人怪你。'他站了很久。然后转身,把山门从里面推开。没锁。中远景,白雪覆盖石阶和古旧山门,人背对镜头。冷白色调,天空淡灰。人站画面中下部偏左,右侧留白给远山。水墨写意+电影感留白。不到500字,没上下文。但写完那一刻,故事不再是一行备忘录,它有了终点。搭档帮了我一个忙:我写完结局,让它问我问题。

2401_89926894的博客 98

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

上一篇: 从零开始写项目第三篇【在线聊天和个人收藏夹】
下一篇: 从零开始写项目终极【维护网站、修复Bug】
Java3y
Java3y 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 509原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值