当前位置: 首页 > ds >正文

简易博客点赞系统实现

简易博客点赞系统

好久没写 Java 了,整个简单的项目进行康复训练。
基于 Spring Boot + SSM + MySQL + Mybatis-Plus + Knife4j + Swagger 的一个简易博客点赞系统

开源地址:https://github.com/FangMoyu/simple-thumb

功能

  • 登录
  • 获取当前登录用户
  • 获取博客
  • 展示所有博客
  • 点赞
  • 取消点赞

亮点

  • 基于编程式事务实现点赞和取消点赞功能
  • 为避免用户重复点赞,使用本地锁对用户 id 进行加锁,防止接口短时间重复调用
  • 提供了通用返回类、全局异常处理器、自定义错误码等

部分代码实现

点赞功能

	@Overridepublic Boolean doThumb(DoThumbRequest doThumbRequest, HttpServletRequest request) {// 参数校验ThrowUtils.throwIf(doThumbRequest == null || doThumbRequest.getBlogId() == null,ErrorCode.PARAMS_ERROR, "参数错误");User loginUser = userService.getLoginUser(request);// 加锁,避免用户短时间多次点赞synchronized (loginUser.getId().toString().intern()) {// 编程式事务return transactionTemplate.execute(status -> {// 获取当前当前进行点赞的博客idLong blogId = doThumbRequest.getBlogId();// 判断当前用户是否已经点赞过该博客boolean exists = this.lambdaQuery().eq(Thumb::getBlogId, blogId).eq(Thumb::getUserId, loginUser.getId()).exists();// 如果已经点赞过,抛出异常ThrowUtils.throwIf(exists, ErrorCode.OPERATION_ERROR, "已经点赞过");// 更新博客点赞数 + 1boolean update = blogService.lambdaUpdate().eq(Blog::getId, blogId).setSql("thumbCount = thumbCount + 1").update();// 保存点赞记录Thumb thumb = new Thumb();thumb.setBlogId(blogId);thumb.setUserId(loginUser.getId());return update && this.save(thumb);});}}

取消点赞

    @Overridepublic Boolean undoThumb(DoThumbRequest doThumbRequest, HttpServletRequest request) {// 参数校验ThrowUtils.throwIf(doThumbRequest == null || doThumbRequest.getBlogId() == null, ErrorCode.PARAMS_ERROR, "参数错误");User loginUser = userService.getLoginUser(request);// 加锁,避免用户短时间多次取消点赞synchronized (loginUser.getId().toString().intern()) {// 编程式事务return transactionTemplate.execute(status -> {// 获取当前当前进行点赞的博客idLong blogId = doThumbRequest.getBlogId();// 判断当前用户是否已经点赞过该博客Thumb thumb = this.lambdaQuery().eq(Thumb::getBlogId, blogId).eq(Thumb::getUserId, loginUser.getId()).one();// 如果没有点赞过,抛出异常ThrowUtils.throwIf(thumb == null, ErrorCode.OPERATION_ERROR, "未点赞过");// 更新博客点赞数 - 1boolean update = blogService.lambdaUpdate().eq(Blog::getId, blogId).setSql("thumbCount = thumbCount - 1").update();// 删除点赞记录return update && this.removeById(thumb.getId());});}}
http://www.xdnf.cn/news/1561.html

相关文章:

  • 基于ACL方式手动建立站点间 IPSec 隧道
  • Go协程的调用与原理
  • 文件系统常见函数
  • WebGL简介
  • Redis 服务自动开启、设置密码和闪退问题
  • 程序员学英文之Shipment Claim 运输和索赔
  • 泛型T和object
  • 嵌入式系统调用底层基本原理分析
  • 绝区零薇薇安养成攻略 绝区零薇薇安驱动盘带什么
  • 马来西亚股票数据接口技术解析与接入实践
  • 【EasyPan】removeFile2RecycleBatch方法及递归操作解析
  • GD32F407单片机开发入门(六)定时器TIMER详解及实战含源码
  • 18487.1-2015-解读笔记三-交流充电之车桩交互-PWM
  • 集结号海螺捕鱼组件搭建教程与源码结构详解(第一篇)
  • Hi3518E官方录像例程源码流程分析(五)
  • 【论文解读】----Question Answering and Grounding for Remote Sensing Change Detection
  • 【前沿技术解析】钠离子电池突破性进展:低成本+高安全重塑新能源产业格局
  • 深入理解XGBoost(何龙 著)学习笔记(一)
  • pojovoDto等概念
  • DocsGPT remote接口RCE(CVE-2025-0868)
  • 【金仓数据库征文】从 HTAP 到 AI 加速,KingbaseES 的未来之路
  • 【AI提示词】公司法律顾问
  • 67 款 App 因违规收集个人信息被通报 隐私合规检测成重新上架门槛
  • 深入解析HashMap的特性以及源码
  • PH热榜 | 2025-04-23
  • 声纹振动传感器在电力监测领域的应用
  • JVM虚拟机-JVM调优、内存泄漏排查、CPU飙高排查
  • URI、URL与URN详解概念介绍
  • JDK 7 Update 0 (64位) 详细Windows 安装指南
  • 项目初期如何快速组建高效团队