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

 更新时间:2022年08月31日 09:38:11   作者:小黑ya_  
这篇文章主要为大家详细介绍了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进行对后台接口调用

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

相关文章

  • Java中的信号量Semaphore详细解读

    Java中的信号量Semaphore详细解读

    这篇文章主要介绍了Java中的信号量Semaphore详细解读,Java信号量机制可以用来保证线程互斥,创建Semaphore对象传入一个整形参数,类似于公共资源,需要的朋友可以参考下
    2023-11-11
  • Mybatis查询返回Map<String,Object>类型实例详解

    Mybatis查询返回Map<String,Object>类型实例详解

    这篇文章主要给大家介绍了关于Mybatis查询返回Map<String,Object>类型的相关资料,平时没太注意怎么用,今天又遇到了总结记录一下,方便以后处理此类问题,需要的朋友可以参考下
    2022-07-07
  • 关于IDEA的junit单元测试Scanner输入不可用的问题(多种原因分析)

    关于IDEA的junit单元测试Scanner输入不可用的问题(多种原因分析)

    IDEA在Junit测试中使用了Scanner,但是控制台一直转圈,无法输入,eclipse默认可用,其实解决方法很多,今天小编给大家分享多种问题原因分析及解决方法,感兴趣的朋友一起看看吧
    2021-06-06
  • java用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间

    java用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间

    这篇文章主要给大家介绍了关于java使用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间的相关资料,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • 利用Java实现复制Excel工作表功能

    利用Java实现复制Excel工作表功能

    这篇文章主要给大家介绍了关于如何利用Java实现复制Excel工作表功能的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • Java Map集合与Collection类的使用详解

    Java Map集合与Collection类的使用详解

    这篇文章主要介绍了Java Map集合的使用及Collection工具类使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • SpringBoot-RestTemplate如何实现调用第三方API

    SpringBoot-RestTemplate如何实现调用第三方API

    这篇文章主要介绍了SpringBoot-RestTemplate实现调用第三方API的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • SpringMVC HttpMessageConverter报文信息转换器

    SpringMVC HttpMessageConverter报文信息转换器

    ​​HttpMessageConverter​​​,报文信息转换器,将请求报文转换为Java对象,或将Java对象转换为响应报文。​​​HttpMessageConverter​​​提供了两个注解和两个类型:​​@RequestBody,@ResponseBody​​​,​​RequestEntity,ResponseEntity​​
    2023-01-01
  • MyBatis游标Cursor在Oracle数据库上的测试方式

    MyBatis游标Cursor在Oracle数据库上的测试方式

    这篇文章主要介绍了MyBatis游标Cursor在Oracle数据库上的测试方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 详解Maven Docker镜像使用技巧

    详解Maven Docker镜像使用技巧

    这篇文章主要介绍了详解Maven Docker镜像使用技巧,Maven是目前最流行的Java项目管理工具之一,提供了强大的包依赖管理和应用构建功能。本文以Maven为例介绍了Docker在应用构建中的一些常见技巧。
    2018-06-06

最新评论