基于Angularjs+mybatis实现二级评论系统(仿简书)

发布时间 - 2026-01-10 23:00:55    点击率:

一直想写个评论系统,看了下多说,网易,简书的评论,想了下自己该实现怎样的评论系统。

评论系统关键是嵌套层数以及数据库表设计。嵌套层数多,表结构复杂,呈现也麻烦,最后决定实现一个二级评论。系统由maven构建,springboot快速搭建spring环境。前台采用angularjs+bootstrap,后台使用springmvc+mybatis,数据库采用MySQL.前台请求后台API操作评论。

目录结构

数据库表设计

##说说表或者文章表 
create table saying ( 
 saying_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
 sayingContent VARCHAR(500) NOT NULL, 
 author VARCHAR(50) NOT NULL, 
 sayingAvatar VARCHAR(50) NOT NULL, 
 likes VARCHAR(500) NOT NULL, 
 createTime datetime NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
 
##一级评论表 
create table firstLevelComment ( 
 flc_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
 sayingId INT NOT NULL, 
 commenter VARCHAR(50) NOT NULL, 
 commenterAvatar VARCHAR(50) NOT NULL, 
 commentContent VARCHAR(500) NOT NULL, 
 commentTime datetime NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
 
##二级评论表 
create table secondLevelComment ( 
 slc_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
 sayingId INT NOT NULL, 
 flcId INT NOT NULL, 
 replier VARCHAR(50) NOT NULL, 
 toCommenter VARCHAR(50) NOT NULL, 
 replyContent VARCHAR(50) NOT NULL, 
 replyTime datetime NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

获取评论的mapper(关键)

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > 
<mapper namespace="personal.timeless.cms.mapper.SayingMapper" > 
 
 <resultMap id="SayingMap" type="saying" > 
 <id column="saying_id" property="id" jdbcType="INTEGER" /> 
 <result column="sayingContent" property="sayingContent" jdbcType="INTEGER" /> 
 <result column="author" property="author" jdbcType="VARCHAR" /> 
 <result column="sayingAvatar" property="avatar" jdbcType="VARCHAR" /> 
 <result column="likes" property="likes" jdbcType="VARCHAR" /> 
 <result column="createTime" property="createTime" jdbcType="TIMESTAMP" /> 
 <collection property="flcs" ofType="firstLevelComment" column="sayingId"> 
 <id column="flc_id" property="id" jdbcType="INTEGER" /> 
 <result column="sayingId" property="sayingId" jdbcType="INTEGER" /> 
 <result column="commenter" property="commenter"/> 
 <result column="commenterAvatar" property="avatar"/> 
 <result column="commentContent" property="commentContent"/> 
 <result column="commentTime" property="commentTime" jdbcType="TIMESTAMP" /> 
 <collection property="slcs" ofType="secondLevelComment" column="flcId"> 
  <id column="slc_id" property="id" jdbcType="INTEGER" /> 
  <result column="flcId" property="flcId" jdbcType="INTEGER" /> 
  <result column="replier" property="replier"/> 
  <result column="toCommenter" property="toCommenter"/> 
  <result column="replyContent" property="replyContent"/> 
  <result column="replyTime" property="replyTime" jdbcType="TIMESTAMP" /> 
 </collection> 
 </collection> 
 </resultMap> 
 
 <select id="selectOneById" resultMap="SayingMap" parameterType="int" > 
 select * from 
 (select * from saying s left join firstLevelComment fc on s.saying_id=fc.sayingId where s.saying_id=#{id}) tmp left join secondLevelComment sc 
 on tmp.flc_id = sc.flcId 
 </select> 
 
 <select id="updateLikesById"> 
 update saying set likes = #{likes} where saying_id = #{id} 
 </select> 
 </mapper> 

页面展示


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Angularjs  # mybatis  # 评论系统  # 使用AngularJS和PHP的Laravel实现单页评论的方法  # Angular实现类似博客评论的递归显示及获取回复评论的数据  # 层数  # 看了  # 想了  # 网易  # 多说  # 大家多多  # 想写  # sayingAvatar  # author  # datetime  # createTime  # likes  # PRIMARY  # KEY  # sayingContent  # VARCHAR  # AUTO_INCREMENT  # commenter  # sayingId  # flc_id 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Blade模板引擎语法_Laravel Blade布局继承用法  如何在搬瓦工VPS快速搭建网站?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  Swift开发中switch语句值绑定模式  教你用AI将一段旋律扩展成一首完整的曲子  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  Laravel怎么连接多个数据库_Laravel多数据库连接配置  浅谈Javascript中的Label语句  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能  Internet Explorer官网直接进入 IE浏览器在线体验版网址  Laravel如何记录自定义日志?(Log频道配置)  北京企业网站设计制作公司,北京铁路集团官方网站?  Mybatis 中的insertOrUpdate操作  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Python文件异常处理策略_健壮性说明【指导】  利用JavaScript实现拖拽改变元素大小  JS碰撞运动实现方法详解  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel如何实现本地化和多语言支持?(i18n教程)  Laravel storage目录权限问题_Laravel文件写入权限设置  Python图片处理进阶教程_Pillow滤镜与图像增强  如何注册花生壳免费域名并搭建个人网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)  Laravel如何处理异常和错误?(Handler示例)  Linux系统命令中screen命令详解  Laravel如何使用Eloquent进行子查询  如何在云主机快速搭建网站站点?  如何快速启动建站代理加盟业务?  laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法  Laravel如何自定义分页视图?(Pagination示例)  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】  如何为不同团队 ID 动态生成多个独立按钮  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  佛山企业网站制作公司有哪些,沟通100网上服务官网?  西安专业网站制作公司有哪些,陕西省建行官方网站?  南京网站制作费用,南京远驱官方网站?  微信小程序 配置文件详细介绍  昵图网官方站入口 昵图网素材图库官网入口  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  canvas 画布在主流浏览器中的尺寸限制详细介绍