Java SpringBoot点赞功能实现攻略
一、前置知识
在进行本文中介绍的Java SpringBoot点赞功能实现之前,我们需要掌握以下技能:
- 熟练掌握Java编程语言。
- 掌握Java SpringBoot框架的基本使用方法。
- 熟练使用MySQL数据库。
- 了解前端开发技术,如HTML、CSS、JavaScript等。
二、功能实现步骤
以下是在Java SpringBoot框架中实现点赞功能的步骤:
- 创建数据库表
点赞功能需要存储用户点赞信息,我们可以新建一张表来存储用户点赞信息。在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。
- 创建数据持久化实体类
创建一个实体类来映射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
}
- 创建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);
}
- 创建服务层
在服务中创建点赞功能的实现方法,如:
@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方法是获取某个内容的所有点赞记录列表。
- 前端页面实现
点赞功能的前端页面需要实现两个功能:判断并展示当前用户是否已经点赞,点击点赞或取消点赞按钮。
<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表中。
我们需要按照上文所述的步骤进行操作:
- 在MySQL数据库中新建一个名为like_table的表,表结构如下:
CREATE TABLE like_table (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
content_id INT NOT NULL
);
- 创建数据持久化实体类
@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
}
- 创建DAO接口和实现类
public interface LikeRepository extends JpaRepository<Like, Long> {
Like findByUserIdAndContentId(Long userId, Long contentId);
List<Like> findAllByContentId(Long contentId);
}
- 创建服务层
@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);
}
}
- 前端页面实现
<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技术站