非常全面的Java SpringBoot点赞功能实现

Java SpringBoot点赞功能实现攻略

一、前置知识

在进行本文中介绍的Java SpringBoot点赞功能实现之前,我们需要掌握以下技能:

  1. 熟练掌握Java编程语言。
  2. 掌握Java SpringBoot框架的基本使用方法。
  3. 熟练使用MySQL数据库。
  4. 了解前端开发技术,如HTML、CSS、JavaScript等。

二、功能实现步骤

以下是在Java SpringBoot框架中实现点赞功能的步骤:

  1. 创建数据库表

点赞功能需要存储用户点赞信息,我们可以新建一张表来存储用户点赞信息。在MySQL数据库中新建一个名为like_table的表,表结构如下:

CREATE TABLE like_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    content_id INT NOT NULL
);

其中,id为点赞记录的唯一标识符,自动递增;user_id为点赞的用户ID;content_id为被点赞的内容ID。

  1. 创建数据持久化实体类

创建一个实体类来映射like_table表,这个实体类需要用@Entity、@Table和@Id注解标记。

@Entity
@Table(name = "like_table")
public class Like implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "user_id")
    private Long userId;

    @Column(name = "content_id")
    private Long contentId;

    // getters and setters
}
  1. 创建DAO接口和实现类

创建一个DAO接口LikeRepository,继承JpaRepository,继承了JpaRepository后就可以享受JPA提供的诸多便利了。需要在LikeRepository中添加一些查询方法,如:

public interface LikeRepository extends JpaRepository<Like, Long> {
    Like findByUserIdAndContentId(Long userId, Long contentId);
    List<Like> findAllByContentId(Long contentId);
}
  1. 创建服务层

在服务中创建点赞功能的实现方法,如:

@Service
public class LikeService {
    @Autowired
    private LikeRepository likeRepository;

    public boolean isLiked(Long userId, Long contentId) {
        Like like = likeRepository.findByUserIdAndContentId(userId, contentId);
        return like != null;
    }

    public void like(Long userId, Long contentId) {
        Like like = new Like();
        like.setUserId(userId);
        like.setContentId(contentId);
        likeRepository.save(like);
    }

    public void cancelLike(Long userId, Long contentId) {
        Like like = likeRepository.findByUserIdAndContentId(userId, contentId);
        likeRepository.delete(like);
    }

    public List<Like> getLikeList(Long contentId) {
        return likeRepository.findAllByContentId(contentId);
    }
}

其中,isLiked方法是判断用户是否已经点赞,like方法是用户进行点赞操作,cancelLike方法是用户取消点赞操作,getLikeList方法是获取某个内容的所有点赞记录列表。

  1. 前端页面实现

点赞功能的前端页面需要实现两个功能:判断并展示当前用户是否已经点赞,点击点赞或取消点赞按钮。

<div>
  <button type="button" class="btn btn-primary like-btn" data-liked="${isLiked}" data-content-id="${contentId}">
    <span class="like-icon">
      <i class="fa fa-heart"></i>
    </span>
    <span class="like-text">${likeText}</span>
  </button>
</div>

其中,data-liked存储当前用户是否点赞,data-content-id存储内容ID。

<script>
  const likeBtn = $('.like-btn');
  const likeText = ['点赞', '已赞'];

  $(document).ready(function () {
    likeBtn.on('click', function() {
      const contentId = $(this).data('content-id');
      if ($(this).data('liked')) {
        cancelLike(contentId);
      } else {
        like(contentId);
      }
    });
  });

  function like(contentId) {
    $.ajax({
      type: 'POST',
      url: `/like?contentId=${contentId}`,
      success: function () {
        likeBtn.text(likeText[1]);
        likeBtn.data('liked', true);
      },
      error: function () {
        alert('点赞失败,请重试');
      }
    });
  }

  function cancelLike(contentId) {
    $.ajax({
      type: 'POST',
      url: `/cancel_like?contentId=${contentId}`,
      success: function () {
        likeBtn.text(likeText[0]);
        likeBtn.data('liked', false);
      },
      error: function () {
        alert('取消点赞失败,请重试');
      }
    });
  }
</script>

以上是点赞功能的前端实现方法,通过ajax进行POST请求,成功后更新前端页面点赞按钮的状态。

三、实例说明

示例一

假设我们的网站需要实现对一篇文章进行点赞的功能,文章存储在MySQL数据库中的article表中。

我们需要按照上文所述的步骤进行操作:

  1. 在MySQL数据库中新建一个名为like_table的表,表结构如下:
CREATE TABLE like_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    content_id INT NOT NULL
);
  1. 创建数据持久化实体类
@Entity
@Table(name = "like_table")
public class Like implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "user_id")
    private Long userId;

    @Column(name = "content_id")
    private Long contentId;

    // getters and setters
}
  1. 创建DAO接口和实现类
public interface LikeRepository extends JpaRepository<Like, Long> {
    Like findByUserIdAndContentId(Long userId, Long contentId);
    List<Like> findAllByContentId(Long contentId);
}
  1. 创建服务层
@Service
public class LikeService {
    @Autowired
    private LikeRepository likeRepository;

    public boolean isLiked(Long userId, Long contentId) {
        Like like = likeRepository.findByUserIdAndContentId(userId, contentId);
        return like != null;
    }

    public void like(Long userId, Long contentId) {
        Like like = new Like();
        like.setUserId(userId);
        like.setContentId(contentId);
        likeRepository.save(like);
    }

    public void cancelLike(Long userId, Long contentId) {
        Like like = likeRepository.findByUserIdAndContentId(userId, contentId);
        likeRepository.delete(like);
    }

    public List<Like> getLikeList(Long contentId) {
        return likeRepository.findAllByContentId(contentId);
    }
}
  1. 前端页面实现
<div>
  <button type="button" class="btn btn-primary like-btn" data-liked="${isLiked}" data-content-id="${articleId}">
    <span class="like-icon">
      <i class="fa fa-heart"></i>
    </span>
    <span class="like-text">${likeText}</span>
  </button>
</div>
<script>
  const likeBtn = $('.like-btn');
  const likeText = ['点赞', '已赞'];

  $(document).ready(function () {
    likeBtn.on('click', function() {
      const contentId = $(this).data('content-id');
      if ($(this).data('liked')) {
        cancelLike(contentId);
      } else {
        like(contentId);
      }
    });
  });

  function like(contentId) {
    $.ajax({
      type: 'POST',
      url: `/like?contentId=${contentId}`,
      success: function () {
        likeBtn.text(likeText[1]);
        likeBtn.data('liked', true);
      },
      error: function () {
        alert('点赞失败,请重试');
      }
    });
  }

  function cancelLike(contentId) {
    $.ajax({
      type: 'POST',
      url: `/cancel_like?contentId=${contentId}`,
      success: function () {
        likeBtn.text(likeText[0]);
        likeBtn.data('liked', false);
      },
      error: function () {
        alert('取消点赞失败,请重试');
      }
    });
  }
</script>

示例二

我们的网站有一个视频播放页面,需要在该页面实现对视频的点赞功能。

做法同示例一,只需要将articleId修改为videoId即可。具体代码的实现可参考上述示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:非常全面的Java SpringBoot点赞功能实现 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 使用maven编译Java项目实例

    使用Maven编译Java项目的完整攻略,主要分为以下几个步骤: Step 1:准备工作 在开始编译Java项目之前,需要确保已经安装好了以下软件和环境: JDK:确保已经安装了JDK,并设置了JAVA_HOME环境变量。 Maven:需要先安装Maven,并将其添加到PATH环境变量中。 Step 2:创建项目 在本地计算机上创建一个Java项目,并使用M…

    Java 2023年5月20日
    00
  • 浅析java的foreach循环

    下面是针对“浅析Java的foreach循环”的完整攻略: 什么是foreach循环 foreach循环,也被称为增强型for循环,是Java语言中一种用于遍历数组和集合类的循环结构。通过foreach循环,我们可以简化数组和集合的遍历过程,不需要手动去控制下标或迭代器的使用。 foreach循环的语法 foreach循环的语法结构如下: for (元素类型…

    Java 2023年5月26日
    00
  • MyBatis-Plus 条件查询器的实现

    “MyBatis-Plus 条件查询器的实现”是一个非常重要的话题,它涉及到MyBatis-Plus框架中的核心功能,可以让开发人员更快速地构建和查询数据库。下面我们将详细讲解如何实现MyBatis-Plus的条件查询器。 1. 安装MyBatis-Plus 要使用MyBatis-Plus,首先需要安装它。可以通过Maven或Gradle的依赖来安装它。Ma…

    Java 2023年5月20日
    00
  • 全面解析Java支持的数据类型及Java的常量和变量类型

    全面解析Java支持的数据类型及Java的常量和变量类型 Java支持的基本数据类型 Java支持八种基本数据类型,分别是:byte、short、int、long、float、double、char和boolean。具体说明如下: byte:8位有符号整数类型。用于节省内存,适合于低级数据。 short:16位有符号整数类型。和byte类似,被用于节省空间。…

    Java 2023年5月26日
    00
  • SpringMVC适配器模式代码示例

    简介 在SpringMVC中,适配器模式用于将请求转换为处理程序方法。本文将介绍SpringMVC适配器模式的代码示例,并提供两个示例说明。 SpringMVC适配器模式 SpringMVC适配器模式是一种设计模式,用于将请求转换为处理程序方法。在SpringMVC中,适配器模式由HandlerAdapter接口和其实现类来实现。以下是一个使用适配器模式的示…

    Java 2023年5月17日
    00
  • AOT的作用是什么?

    当谈到AOT时,我们通常指的是AoT编译,即Ahead-of-Time编译技术。以下是AOT的作用以及如何使用它的完整攻略。 AOT的作用 AOT编译技术是指在应用程序部署之前,将应用程序的代码转换成本地可执行代码的过程。AOT的主要作用在于: 提高应用程序的性能:与JIT(Just-in-Time)编译器相比,AOT编译器将应用程序的代码在部署时即转换成本…

    Java 2023年5月11日
    00
  • Netty分布式行解码器逻辑源码解析

    Netty分布式行解码器逻辑源码解析 Netty是一款基于Java的NIO框架,主要用于开发高性能、高可靠性的网络通信服务器和客户端,其支持各种应用协议,如HTTP、SMTP、WebSocket、Telnet等。其中,Netty分布式行解码器是其常用的一个功能,本文将对其进行详细的源码解析和使用攻略。 什么是Netty分布式行解码器 Netty分布式行解码器…

    Java 2023年5月20日
    00
  • 构建Maven多模块项目的方法

    构建Maven多模块项目的方法可以分为以下步骤: 创建Maven父项目 在命令行下进入项目文件夹,执行以下命令: mvn archetype:generate -DgroupId=com.example -DartifactId=my-parent-project -DarchetypeArtifactId=maven-archetype-quickstar…

    Java 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部