基于springboot的评论,点赞模块
最近刷微博,看抖⾳发现最有趣的就是看评论了,然后想着⾃⼰的项⽬正好差⼀个评论模块,所以⾃⼰就写了⼀个点赞评论模块,好了,废话不多说,直接进⼊主题。
项⽬地址: 欢迎各位fork,star
1. 分析阶段
1.先从前端⼊⼿,看看前端需要哪些数据(这⾥以csdn博客评论为列),以博客为例,⼀篇博客下⾯可能会有多条评论。每条评论其实分为两种,⼀种是直接对博客的评论,称之为⽗评论;另⼀种是对已有评论的评论(博主回复),称为⼦评论。点赞就⽐较好区分了,⽆论是⽗评论还是⼦评论或者博客评论,点赞只要关联被评论对象的唯⼀标识和点赞⽤户的id就可以了。⼀篇博客可以有多条评论,⼀条⽗评论,可以有多条⼦评论。所以博客与评论的关系为⼀对多,⽗评论与⼦评论的关系也是⼀对多,⼀个点赞对应⼀个点赞对象,所以点赞与点赞的对象为⼀对⼀,由此则可以设置数据库表。
2.设计阶段
由此可以得出,评论分为两种:⼀种为⽗评论,另⼀种为⼦评论。则:
⼀条⽗评论⾄少拥有的属性为:评论的唯⼀标识,评论对象的id,评论者的id,评论者名字,评论者的头像,评论的内容,评论的点赞数,评论发布的时间
⼀条⼦评论⾄少拥有的属性为:⽗评论的唯⼀标识,评论者的id,评论者名字,评论者的头像,,被评论者的id,被评论者名字,被评论者的头像,评论的内容,评论的点赞数,评论发布的时间
⼀条评论的点赞⾄少拥有的属性为:被评论对象的唯⼀标识,⽤户的唯⼀标识,点赞状态
由此就可以设计数据库表了。
⽗评论表(comments_root):
id主键
type评论的类型,评论博客,评论下载资源等
owner_id评论对象的id
from_id评论者的id
id主键
from_name评论者的名字
from_avatar评论者的头像链接
like_num评论的点赞数
content评论的内容comment_id评论的唯⼀标识
create_time评论的发布时间
⼦评论表(comments_reply):
id⽤来关联⽗评论的主键id comment_id⼦评论的唯⼀标识from_id评论者的id
from_name评论者的名字
from_avatar评论者的头像链接to_id被评论者的id
to_name被评论者的名字
to_avatar被评论者的头像链接
like_num评论的点赞数
content评论的内容
create_time评论的发布时间
点赞表(liked)
id主键
obj_id对应对象的id,可以是⽂章id或者评论id等
user_id点赞者的id
like_status点赞的状态,1标识已赞,0标识取消赞3.创建⼯程
(1)创建springboot项⽬,然后在项⽬根⽬录下的 l ⽂件中添加如下依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.tl666</groupId>
<artifactId>comments</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>comments</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId&batis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
mysql下载csdn<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apachemons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
</project>
(2)编辑配置⽂件l或application.properties中添加配置,博主⽤的是yml格式的配置⽂件,它格式⽐较清
晰,l
spring:
datasource:
driver-class-name: sql.jdbc.Driver
username: root
password: 123456
url: jdbc:mysql://127.0.0.1/comments?characterEncoding=utf-8&useSSL=false
mybatis:
configuration:
mapUnderscoreToCamelCase: true #开启mabatis的驼峰命名法
(3)然后在springboot中写好对应的实体类即可
(4)然后写数据持久化层CommentsMapper.java
package com.tl666ments.mapper;
import com.tl666ments.pojo.CommentsRoot;
import com.tl666ments.pojo.CommentsReply;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface CommentsMapper {
/**
* 获取该⽂章或资源下的所有评论
* @param ownerId ⽂章或资源id
* @return
*/
// @Select("select * from comments_info where owner_id = #{ownerId}")
List<CommentsRoot> findByOwnerId(String ownerId);
/**
* 添加⼦评论或回复评论
* @param commentsReply
* @return
*/
@Insert("insert into comments_reply (id,comment_id,from_id,from_name,from_avatar,to_id,to_name,to_avatar,like_num,content,create_time) " + "values(#{id},#{commentId},#{fromId},#{fromName},#{fromAvatar},#{toId},#{toName},#{toAvatar},#{likeNum},#{content},#{createTime})")
boolean addSonComments(CommentsReply commentsReply);
/**
* 添加⽗评论
* @param commentsRoot
* @return
*/
/
/ @Insert("insert into comments_root (id,comment_id,owner_id,type,from_id,from_name,from_avatar,like_num,content,create_time) " +
// "values(#{id},#{commentId},#{ownerId},#{type},#{fromId},#{fromName},#{fromAvatar},#{likeNum},#{content},#{createTime})")
boolean addRootComments(CommentsRoot commentsRoot);
}
对应的mybatis的xml⽂件CommentsMapper .xml如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-////DTD Mapper 3.0//EN"
"/dtd/mybatis-3-mapper.dtd">
<!--⼀对多的映射 -->
<mapper namespace="com.tl666ments.mapper.CommentsMapper">
<select id="findByOwnerId" resultMap="Comnents">
select * from comments_root where owner_id = #{ownerId}
</select>
<resultMap type="com.tl666ments.pojo.CommentsRoot" id="Comnents">
<result property="id" column="id" />
<collection property="listCommentsReply" javaType="ArrayList" ofType="com.tl666ments.pojo.CommentsReply" column="id" select="getSonComments"></collection>
</resultMap>
<select id="getSonComments" resultType="com.tl666ments.pojo.CommentsReply">
select * from comments_reply where id = #{id}
</select>
<insert id="addRootComments" parameterType="com.tl666ments.pojo.CommentsRoot" keyProperty="id">
<selectKey keyProperty='id' resultType='int' order='AFTER' >
select LAST_INSERT_ID();
</selectKey>
insert into comments_root (id,comment_id,owner_id,type,from_id,from_name,from_avatar,like_num,content,create_time)
values(#{id},#{commentId},#{ownerId},#{type},#{fromId},#{fromName},#{fromAvatar},#{likeNum},#{content},#{createTime})
</insert>
</mapper>
(5)控制层的核⼼代码如下
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论