非常全面的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日

相关文章

  • Java异常处理与throws关键字用法分析

    Java异常处理与throws关键字用法分析 异常处理概述 在 Java 中,异常处理是指程序在执行期间可能出现的“异常事件”,如:文件损坏、网络中断等。当出现异常事件时,程序会中止,除非在代码中特殊处理它们。 Java 中提供了 try…catch…finally 块来实现异常处理,其中 try 块用于包含可能出现异常的代码,catch 块用于捕获…

    Java 2023年5月27日
    00
  • 超级全面的PHP面试题整理集合第1/2页

    下面是详细的攻略: 第1/2页页面介绍 这是一篇关于PHP面试题的文章,分成1/2页展示,第一页包含了50道PHP面试题,第二页包含了另外50道PHP面试题。对于准备面试的PHP开发人员来说是一份不错的复习资料。该页面的排版清晰简洁,每个问题答案都有详细的解释,更新时间较新,适合PHP初级和高级开发人员进行参考。 页面内容分析 该页面的内容主要由50道PHP…

    Java 2023年6月15日
    00
  • Spring下Filter过滤器配置全局异常处理的详细步骤

    首先让我们来了解一下Filter和全局异常处理的概念: Filter是Web应用中的过滤器,用于对请求进行过滤和处理,可以在处理请求之前和之后进行一些额外的处理或者过滤,同时也可优化代码性能、保护系统安全、统一处理日志等。 全局异常处理是指处理在应用程序中未被捕获的所有异常,避免应用程序因为未捕获异常而崩溃或者无法继续正常工作。 因此,我们可以结合Filte…

    Java 2023年5月27日
    00
  • 浅谈ASP数据库下载漏洞

    浅谈ASP数据库下载漏洞攻略 什么是ASP数据库下载漏洞 ASP数据库下载漏洞,是指在ASP网站中由于程序员未对用户输入数据进行合适的验证,导致攻击者利用构造恶意请求下载网站中的数据库文件。攻击者可以通过下载数据库文件获取网站中的敏感数据,如用户信息、密码、订单记录等。 攻击过程 攻击者在ASP网站中使用”download.asp?”的关键字搜索,找到下载文…

    Java 2023年6月16日
    00
  • java实现文本框和文本区的输入输出

    下面我将详细讲解“Java实现文本框和文本区的输入输出”的完整攻略。 目录 实现文本框的输入输出 如果只需要获取文本框的文本内容 如果需要监听文本框的事件 实现文本区的输入输出 获取文本区的文本内容 设置文本区的文本内容 如果需要监听文本区的事件 实现文本框的输入输出 如果只需要获取文本框的文本内容 使用JTextField类可以实现文本框,可以通过getT…

    Java 2023年5月19日
    00
  • 浅谈SpringBoot之事务处理机制

    浅谈SpringBoot之事务处理机制 什么是事务? 事务是指一系列数据库操作(insert、update、delete等),要么全部完成,要么全部回滚,如果其中任何一个操作失败,整个事务将回滚到起点。 在Spring Boot中,可以使用@Transactional注解来声明一个事务,这样在方法执行时就会被视为一个事务,并启用该方法中的所有数据库操作,这个…

    Java 2023年5月15日
    00
  • 解析Java中PriorityQueue优先级队列结构的源码及用法

    解析Java中PriorityQueue优先级队列结构的源码及用法 什么是优先级队列? 优先级队列是一种特殊的队列,它会根据元素的优先级来决定队列中元素的顺序。在Java中,我们可以使用PriorityQueue类来实现优先级队列。 PriorityQueue源码解析 Java中的优先级队列主要由以下几个部分组成: PriorityQueue的构造函数 pu…

    Java 2023年5月19日
    00
  • 文件格式有哪些,常见文件格式种类大全(中英对照)

    文件格式有哪些,常见文件格式种类大全(中英对照) 在计算机中,不同的文件格式对应着不同的数据类型。每种数据类型所使用的文件格式也会不同。本文将列举一些常见的文件格式并进行简要介绍和中英对照。 图片文件格式 JPEG (.jpg, .jpeg) JPEG全名为Joint Photographic Experts Group,是一种带有损压缩的图像格式,被广泛应…

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