7.20 SpringBoot项目实战【图书详情-学生端】:图书信息 + 评论列表 + 是否收藏

CSDN成就一亿技术人

文章目录

  • 前言
  • 一、接口规划
  • 二、编写服务层
  • 三、编写数据访问层
  • 四、编写控制器
  • 五、PostMan测试
    • 1. getBook 根据id获取图书
    • 2. getBookCommentList 根据id获取图书详情 - 评论列表
    • 3. getFavoriteId 获取学生收藏了某图书的收藏id
  • 最后


前言

学生的【借阅申请】审核通过以后,就有了借阅图书的资格。

产品设计操作流程通常为:查看图书列表 7.3 实现-》查看图书详情-》点击借阅。

我们曾在7.4 实现过管理员端的图书详情,但与学生端还有点区别,本文将实现的是 图书详情-学生端,都是多个接口,让我们拭目以待!


一、接口规划

图书详情-学生端 主要展示3块内容:图书基本信息、评论列表、我是否收藏,所以规划包含以下3个接口:

  1. 图书基本信息API,我们最开始就已实现,如下图:

    在这里插入图片描述

    管理员端调用是/book/detail 接口,小有差别。

  2. 图书评论列表API(审核通过的)

    之前实现的是/book/comment/list接口,查询的是全部的评论,这里需要根据角色做一下完善,代码完善3点:

    对应图① 获取当前登录用户是否是管理员(isAdmin)

    对应图② 当不是管理员时,增加status是审核通过的筛选条件

    对应图③ 当是管理员时,才显示审核人

    在这里插入图片描述

    请参考图片修改相应代码~

  3. 我是否收藏了该图书API

    这是学生需要看到的收藏状态,也是本文我们新增的接口

二、编写服务层

在这里插入图片描述

新增FavoriteService接口

新增getFavoriteId方法,返回收藏id,是为了支持后面的取消收藏

public interface FavoriteService {/*** 获取学生收藏了某图书的收藏id* @param bookId 图书id* @return 收藏id, 如果没收藏则为空**/Integer getFavoriteId(Integer bookId, Integer userId);
}

新增FavoriteServiceImpl类,实现FavoriteService接口,加@Service注解,注入自定义mapper:BookFavoriteMapperExt

@Service
public class FavoriteServiceImpl implements FavoriteService {@Autowiredprivate BookFavoriteMapperExt bookFavoriteMapperExt;@Overridepublic Integer getFavoriteId(Integer bookId, Integer userId) {BookFavorite bookFavorite = bookFavoriteMapperExt.selectByUserId(bookId, userId);return bookFavorite != null ? bookFavorite.getId() : null;}
}

三、编写数据访问层

在这里插入图片描述

新增自定义的mapper:BookFavoriteMapperExt接口,注意对应的包路径

public interface BookFavoriteMapperExt {BookFavorite selectByUserId(@Param("bookId") Integer bookId, @Param("userId") Integer userId);
}

BookFavoriteMapperExt.xml 定义如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.tg.book.dal.mapper.ext.BookFavoriteMapperExt"><select id="selectByUserId" resultType="org.tg.book.dal.po.mbg.BookFavorite">select a.* from book_favorite ainner join student b on a.student_id = b.idwhere a.book_id = #{bookId}and b.user_id = #{userId}and is_cancelled = 0limit 1</select></mapper>

book_favoritestudent表关联查询,按bookId和userId筛选未取消收藏的 limit 1


四、编写控制器

在这里插入图片描述

新增FavoriteController类:

@RestController
@RequestMapping("/favorite")
@Validated
public class FavoriteController {@Autowiredprivate FavoriteService favoriteService;@GetMapping("/book")public TgResult<Integer> getFavoriteId(@Min(value = 1, message = "id必须大于0") @RequestParam("bookId") Integer bookId) {Integer userId = AuthContextInfo.getAuthInfo().loginUserId();Integer bookFavoriteId = favoriteService.getFavoriteId(bookId, userId);return TgResult.ok(bookFavoriteId);}
}

这些代码不要太熟了吧?不多做解释了~


五、PostMan测试

1. getBook 根据id获取图书

/admin/book?id=1

在这里插入图片描述

2. getBookCommentList 根据id获取图书详情 - 评论列表

/admin/book/comment/list?id=1&pageNum=1&pageSize=100

book_comment表的数据如下:

在这里插入图片描述

因为没有【审核通过】的评论,所以当使用【学生账号】查看时,dataList为空

在这里插入图片描述

看看打印的SQL(ok,加上了status=1的条件):

在这里插入图片描述

因为有一条【待审核】的评论,所以当使用【管理员账号】查看时,结果如下:

在这里插入图片描述

3. getFavoriteId 获取学生收藏了某图书的收藏id

/favorite/book?bookId=1

book_favorite表的数据如下:

在这里插入图片描述

当使用student_id=1的账号调用时,返回id=2,OK~

在这里插入图片描述


最后

看到这,觉得有帮助的,刷波666,感谢大家的支持~

想要看更多实战好文章,还是给大家推荐我的实战专栏–>《基于SpringBoot+SpringCloud+Vue前后端分离项目实战》,由我和 前端狗哥 合力打造的一款专栏,可以让你从0到1快速拥有企业级规范的项目实战经验!

具体的优势、规划、技术选型都可以在《开篇》试读!

订阅专栏后可以添加我的微信,我会为每一位用户进行针对性指导!

另外,别忘了关注我:天罡gg ,怕你找不到我,发布新文不容易错过: https://blog.csdn.net/scm_2008

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/167510.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Node学习笔记之包管理工具

一、概念介绍 1.1 包是什么 『包』英文单词是package &#xff0c;代表了一组特定功能的源码集合 1.2 包管理工具 管理『包』的应用软件&#xff0c;可以对「包」进行 下载安装 &#xff0c; 更新 &#xff0c; 删除 &#xff0c; 上传 等操作 借助包管理工具&#xff0c;可…

C++前缀和算法:生成数组原理、源码及测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 动态规划&#xff0c;日后完成。 题目 给定三个整数 n、m 和 k 。考虑使用下图描述的算法找出正整数数组中最大的元素。 请你构建一个具有以下属性的数组 arr &#…

Go并发编程之一

一、前言 新年学新语言Go系列文章已经完结&#xff0c;用了最简单的例子去了解Go基础语法&#xff0c;但Go最牛B的是它对并发的友好支持&#xff0c;每一门语言都有它自己独特的优势&#xff0c;如Java适合大型工程化项目&#xff0c;Python适合做数据分析及运维脚本&#xff0…

AD9371 官方例程HDL详解之JESD204B TX_CLK生成 (一)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 参考资料&#xff1a; UltraScale Architecture GTH Transceive…

Android---OkHttp详解

OkHttp 是一套处理 HTTP 网络请求的依赖库&#xff0c;由 Square 公司设计研发并开源&#xff0c;目前可以在 Java 和 Kotlin 中使用。对于 Android App&#xff0c;OkHttp 现在几乎已经占据了所有的网络请求操作。RetroFit OkHttp 实现网络请求似乎成了一种标配。 因此&…

html 按钮点击倒计时,限制不可点击

html 按钮点击倒计时&#xff0c;限制不可点击 e94cbabd25cfc7f3f53a50a235734c22.jpg <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title></title></head&…

Upload-labs(1-20关保姆级教程)

靶场下载链接 https://github.com/c0ny1/upload-labs 话不多说&#xff0c;直接喂饭 lab-1 上传php木马&#xff0c;发现弹出提示框&#xff0c;查看源码可知是前端过滤 bp抓包&#xff0c;先上传一张正常的jpg图片 修改文件内容和后缀&#xff0c;大概就是想怎么改就怎么…

leetCode 30.串联所有单词的子串

给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c; 那么 "abcdef&…

互联网Java工程师面试题·Java 面试篇·第五弹

目录 79、适配器模式和装饰器模式有什么区别&#xff1f; 80、适配器模式和代理模式之前有什么不同&#xff1f; 81、什么是模板方法模式&#xff1f; 82、什么时候使用访问者模式&#xff1f; 83、什么时候使用组合模式&#xff1f; 84、继承和组合之间有什么不同&#…

【Python】图像和办公文档的处理

图像和办公文档处理 用程序来处理图像和办公文档经常出现在实际开发中&#xff0c;Python的标准库中虽然没有直接支持这些操作的模块&#xff0c;但我们可以通过Python生态圈中的第三方模块来完成这些操作。 操作图像 计算机图像相关知识 颜色。如果你有使用颜料画画的经历&…

【JavaEE】网络编程(网络编程基础、Socket套接字)

一、网络编程基础 1.1、什么是网络编程&#xff1f; 网络编程&#xff0c;指网络上的主机&#xff0c;通过不同的进程&#xff0c;以编程的方式实现网络通信&#xff08;或称为网络数据传输&#xff09; 注意&#xff1a;我们只要满足进程不同就行&#xff1b;所以即便是同一…

03-Android App logger策略

背景 经常会为log定位而烦恼。比如&#xff1a;同一个类&#xff0c;一样的log输出&#xff0c;无法定位到Log输出的行。 方案 1.java StackTraceElement 通过java StackTraceElement获取类名&#xff0c;以及log输出行 2. 具体实现 NonNullprivate static String getSour…

[AUTOSAR][诊断管理][ECU][$14] 清除诊断相关信息

文章目录 一、简介(1)应用场景(2)清除DTC原理(3) 请求格式二、示例代码(1) 14_cls_dtc_info.c三、 常见bug大揭秘一、简介 根据ISO14119-1标准中所述,诊断服务14主要用于Client向Server(ECU)请求清除诊断相关信息。 (1)应用场景 一般而言,14诊断服务,主要应用场景…

中间件安全-CVE复现WeblogicJenkinsGlassFish漏洞复现

目录 服务攻防-中间件安全&CVE复现&Weblogic&Jenkins&GlassFish漏洞复现中间件-Weblogic安全问题漏洞复现CVE_2017_3506漏洞复现 中间件-JBoos安全问题漏洞复现CVE-2017-12149漏洞复现CVE-2017-7504漏洞复现 中间件-Jenkins安全问题漏洞复现CVE-2017-1000353漏…

Linux-管道、环境变量、常用命令

文章目录 管道概念要点与文件重定向的区别 环境变量概念查看 常用命令查看系统状况权限文件查找 用户相关工具 管道 概念 管道的作用类似于文件重定向&#xff0c;可以将前一个命令的stout做为下一个命令的stdin 要点 管道命令进处理stdout&#xff0c;会忽略stderr管道右边…

京东数据分析:2023年9月京东洗烘套装品牌销量排行榜!

鲸参谋监测的京东平台9月份洗烘套装市场销售数据已出炉&#xff01; 根据鲸参谋平台的数据显示&#xff0c;今年9月份&#xff0c;京东平台洗烘套装的销量为7100&#xff0c;环比下降约37%&#xff0c;同比增长约87%&#xff1b;销售额为6000万&#xff0c;环比下降约48%&#…

Swingbench 压力测试(超详细)

目录 前提需要有配置好的oracle哦 1、环境准备 2、安装Swingbench 3、造数据 4、压测 前提需要有配置好的oracle哦 1、环境准备 启动监听 lsnrctl start 启动数据库 sqlplus / as sysdba startup 创建表 CREATE TABLESPACE soe DATAFILE /u01/app/oracle/oradata/or…

HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器(附全部代码在gitcode链接)

&#x1f9ee;前后端分离计算器 &#x1f4da;git仓库链接和代码规范链接&#x1f4bc;PSP表格&#x1f387;成品展示&#x1f3c6;&#x1f3c6;科学计算器&#xff1a;1. 默认界面与页面切换2. 四则运算、取余、括号3. 清零Clear 回退Back4. 错误提示 Error5. 读取历史记录Hi…

MySQL-DML【数据操作语言】(图码结合)

目录 &#x1f6a9;DML的定义 &#x1f449;DML-添加数据 &#x1f393;给指定的字段添加数据 &#x1f576;️查询表数据的方式 ❗疑惑点一【Affecter rows:行数】 ❗疑惑点二【字符集问题】 &#x1f393;给全部字段添加数据 &#x1f393;批量添加数据 &#x1f…

029-第三代软件开发-加载本地字体库

第三代软件开发-加载本地字体库 文章目录 第三代软件开发-加载本地字体库项目介绍加载本地字体库 关键字&#xff1a; Qt、 Qml、 QFont、 QFontDatabase、 ttf 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Langu…