Springboot+Vue+axios实现文章收藏功能

最近在做毕设,也是第一次使用前后分离框架我就边学边用springboot+vue做了一个博客文章的收藏功能,写得不好见谅,算是一个学习笔记吧,给大家分享一下,后面可能还会做一个关注/粉丝的模块。

那就进入正题:

咱们就先从数据库出发

id_blog主要就是关联对应的文章,id_user就是是谁对这个文章收藏了,这样后续利于用户查询自己收藏的文章列表,create_time可以加上添加时间,这个字段后续可进行按照时间排序。

数据库创建好后,就写实体类

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class BlogCollection implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    private Integer idBlog;

    private Integer idUser;

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
}

Mapper

public interface BlogCollectionMapper extends BaseMapper<BlogCollection> {
    @Insert("insert into 表名  values(字段名)")
    void addCollection(BlogCollection bc);
    //可以用mybatisPlus插入数据方便
}

Service

public interface BlogCollectionService extends IService<BlogCollection> {
    void addCollection(BlogCollection bc);
}

serviceImpl

public class BlogCollectionServiceImpl extends ServiceImpl<BlogCollectionMapper, BlogCollection> implements BlogCollectionService {

    @Autowired
    BlogCollectionMapper blogCollectionMapper;
    @Override
    public void addCollection(BlogCollection bc) {
        blogCollectionMapper.addCollection(bc);
    }
}

Controller

@RestController
@RequestMapping("/BlogCollection")
public class BlogCollectionController {
    @Resource
    BlogCollectionService blogCollectionService;
    @Resource
   BlogCollectionMapper BlogCollectionMapper;
    //收藏
    @PostMapping("/addBlogCollection")
    public Result<?> addBlog(@RequestBody BlogCollection blogCollection) {
        blogCollectionService.addCollection(blogCollection);
        return Result.success();
    }
}

以上就是添加收藏的部分代码,然后就是写前端调用及渲染到页面上

<div class="button_content" style="flex: 1;line-height: 60px">
   <el-button @click="addCollection" v-if="collectionState===false" type="text" style="margin-left: 30px">
      <el-icon style="font-size:20px" color="#999aaa"><StarFilled /></el-icon>
       {{collectionCount }}
          </el-button>
          <el-button @click="delCollection" v-if="collectionState===true" type="text" style="margin-left: 30px">
            <el-icon style="font-size:20px" color="#999aaa"><StarFilled /></el-icon>
            {{collectionCount }}
          </el-button>
          <el-button type="text" @click="" style="margin-left: 30px">
            <el-icon style="font-size:20px" color="#999aaa"> <ChatDotRound /></el-icon>
            {{ messageCount }}
  </el-button>
</div>

Js部分

 data(){
    return{
    collectionIds:{},
    collectionState:false,//默认是false则是可收藏,true的话就是已收藏
    }
    },
    methods:{
    add(){
      this.collectionIds.idBlog=this.$route.query.id //当前文章ID
      this.collectionIds.idUser=this.user.id //当前用户ID
    request.post("/BlogCollection/addBlogCollection",this.collectionIds).then(res=>{
        if (res.code === '0') {
          this.$message({
            message: "收藏成功",
            type: "success"
          });
          this.collectionState=true
          console.log(this.collectionState)
        } else {
          this.$message({
            message: res.msg,
            type: "error"
          });
        }
      })
    }
    }

在页面加载时获取该用户判断是否收藏该文章

getState(){
      let userJson=sessionStorage.getItem("user")
      let userid=JSON.parse(userJson).id
      request.get("/user/getState/"+userid).then(res=>{
        if(res.data!=null){        //从表中查询是否有记录,不为空把collectionState设置true
          this.collectionState=true
        }
        if(res.data.length){  //获取结果集如果存在则把collectionState设置true,防止重复收藏
          this.collectionState=true
        }
      })
    },

获取用户收藏状态需要在页面加载时调用,需要在created里进行调用,其次就是取消收藏功能也是跟这个逻辑一样的,在点击取消收藏后将collectionState设置为false即可,后台的话就通过用户id对收藏表查询删除就可以啦!奉上效果图:

未收藏状态

已收藏状态

补充:request是axios封装的一个工具,大家也可以使用原axios进行对后台接口调用

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

(0)

相关推荐

  • Vue+Bootstrap收藏(点赞)功能逻辑与具体实现

    Vue+Bootstrap收藏(点赞)功能逻辑与具体实现(原创),供大家参考,具体内容如下 点赞功能逻辑 点赞功能说明:连接了数据库,在有登录功能的基础上. 点赞功能具体实现目标,如下: 1.用户点击一次加入收藏,数量加一,再次点击取消收藏,数量减一 : 2.当多用户收藏,喜欢数量累加 : 3.如果用户已收藏,显示红心(点亮图标),未收藏,否之. : 点赞功能说明:点赞功能用到两个表,点赞表和数据表的count. 功能分析: 具体实现如图,可把该功能分为两个部分,分别实现. 1.红心部分逻辑:

  • springboot +redis 实现点赞、浏览、收藏、评论等数量的增减操作

    springboot +redis 实现点赞.浏览.收藏.评论等数量的增减操作 前言 第一次写博客,记录一下: 最近做了一个帖子的收藏.点赞数量的功能,其实之前也做过类似的功能,因为之前一直使用的mysql 总是感觉对于这种频繁需要改变的值,不应该给予Mysql过大的压力,本文章采用的是redis 做了持久化.下面贴出关键代码:DataResponse是项目中使用的结果封装实体类:forumDTO是此功能的参数实体,如果有需要请留言. 常量如下: private static final Str

  • SpringBoot实现物品收藏功能

    前后端分离项目–二手交易平台小程序 SpringBoot----物品点赞功能实现 SpringBoot----评论回复功能实现(数据库设计) SpringBoot----文件(图片)上传与显示(下载) 收藏 数据库设计:使用了第三张表来存储哪个用户收藏了哪个物品 写这个的时候压根没想到怎么判断用户是否已经收藏,一开始是前端发一次请求我后台就添加数据到数据表中.这样只是用户可以在我的收藏中查看到收藏了的物品,但是点击进去无法让收藏按钮亮起来. 第一次点击以后会亮,之后第二次进来怎么判断是否收藏这是

  • Springboot+Vue+axios实现文章收藏功能

    最近在做毕设,也是第一次使用前后分离框架我就边学边用springboot+vue做了一个博客文章的收藏功能,写得不好见谅,算是一个学习笔记吧,给大家分享一下,后面可能还会做一个关注/粉丝的模块. 那就进入正题: 咱们就先从数据库出发 id_blog主要就是关联对应的文章,id_user就是是谁对这个文章收藏了,这样后续利于用户查询自己收藏的文章列表,create_time可以加上添加时间,这个字段后续可进行按照时间排序. 数据库创建好后,就写实体类 @Data @EqualsAndHashCod

  • SpringBoot+Vue+Axios+BootStrap实现图书的增删改查功能示例

    目录 一.开发工具 二.项目结构 三.编写项目 四.运行项目 由于是初学Vue.Axios,可能在界面和功能上存在着一些问题,但这些并不妨碍使用.如果有对编程感兴趣的朋友,可以试着做一做.这个由于是第一次做,不太熟练.在后续的过程中会不断的完善. 一.开发工具 IntelliJ IDEA Ultimate 2021.1 apache-maven-3.5.4 MySQL5.7 JDK 1.8.0_281 二.项目结构 三.编写项目 1.创建数据库 SET NAMES utf8mb4; SET FO

  • vue + axios get下载文件功能

    本文实例为大家分享了vue + axios 下载文件的具体代码,供大家参考,具体内容如下 这里是axios的get方法.post方法请点击这里=>here 注意点: Herder 请求头需注意 content-disposition:"attachment;filename=total.xls" content-type:"application/x-download;charset=utf-8" axios请求的responseType为blob respo

  • 完整音乐播放系统基于Java Springboot + Vue + MyBatis

    目录 摘要 主要设计 功能设计 主要技术 功能截图 用户端首页 登录注册 歌单信息 歌手信息 我的音乐 评论点赞 管理员端 首页 用户管理 歌手管理 歌单管理 部分代码 数据库设计 用户表 评论表 收藏表 歌手歌曲表 歌手表 项目总结 视频演示: springboot+vue音乐网站 摘要 网络技术以及计算机的发展,网友们对网络的要求也日益长高,平常在网上听话用一大堆下载软件下载下来也要管理,又占空间,比如那流行歌曲,下载了听了又要删很不方便·而网络音乐库的实现改变了这一状况.它本身就是一个数字

  • 基于Java Springboot + Vue + MyBatis实现音乐播放系统

    目录 摘要 主要设计 功能设计 主要技术 功能截图 用户端首页 登录注册 歌单信息 歌手信息 我的音乐 评论点赞 管理员端 首页 用户管理 歌手管理 歌单管理 部分代码 数据库设计 用户表 评论表 收藏表 歌手歌曲表 歌手表 项目总结 视频演示: springboot+vue音乐网站 摘要 网络技术以及计算机的发展,网友们对网络的要求也日益长高,平常在网上听话用一大堆下载软件下载下来也要管理,又占空间,比如那流行歌曲,下载了听了又要删很不方便·而网络音乐库的实现改变了这一状况.它本身就是一个数字

  • vue+element+springboot实现文件下载进度条展现功能示例

    目录 1. 需求背景 2. 优化方案 3. 具体实现 3.1 前端代码 3.2 后台代码 4. 总结 本文主要介绍了vue+element+springboot实现文件下载进度条展现功能示例,分享给大家,具体如下 最终效果图 1. 需求背景 最近接到一个优化需求,原系统文件下载功能体验不友好,特别是下载一些比较耗时的文件,用户在页面上傻等不知道下载的进度是怎么样的,总以为是系统卡死了. 2. 优化方案 后台优化下载速度(可以研究一下分片下载,这里不做展开) 改造前端用户体验(比如点击下载后你要显

  • springboot+vue实现登录功能的最新方法整理

    目录 一.介绍 二.环境工具 三.搭建后端spring-boot框架 1.选择Spring Initializr创建新项目 2.CommonResult类 3.IErrorCode 接口 4.ResultCode 枚举 5.User类 6.LoginController类 7.修改DemoApplication 8.更改端口号在application.yml 9.不同端口需要解决跨域问题 四.搭建前端Vue框架 1.创建Vue项目 2.添加项目依赖框架 2.1 使用Vue项目管理器添加依赖 2.

  • SpringBoot+Vue.js实现前后端分离的文件上传功能

    这篇文章需要一定Vue和SpringBoot的知识,分为两个项目,一个是前端Vue项目,一个是后端SpringBoot项目. 后端项目搭建 我使用的是SpringBoot1.5.10+JDK8+IDEA 使用IDEA新建一个SpringBoot项目,一直点next即可 项目创建成功后,maven的pom配置如下 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> &l

  • springboot+vue+对接支付宝接口+二维码扫描支付功能(沙箱环境)

    1. 什么是支付宝接口(沙箱环境)? 记录时间:2020年10月15日3:55 现如今,手机支付已相当普遍,而作为开发人员应该对手机支付操作有所了解.而支付宝接口是支付宝提供的一个接口,用来对接软件应用程序在进行金钱交易使用.然后对于编程爱好者而言,想学习这一点就有点难,因为要想使用支付宝接口,必须前提是使用软件应用程序,软件应用程序需要向支付宝申请,提交一系列资料,这一点是实现不了的.这就对开发者增加了一定的难度,因为产品没有上线,然后需要对接支付宝接口就是很大的问题,所以出现了沙箱环境,具有

  • SpringBoot+Vue实现数据添加功能

    一.添加代码生成器 用来自动为数据库映射类建立:mapper.service.controller 注:代码生成器的写法,参考官方文档:https://mp.baomidou.com/ package com.hanmh.utils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomido

随机推荐