前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >7.20 SpringBoot项目实战【图书详情-学生端】:图书信息 + 评论列表 + 是否收藏

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

作者头像
天罡gg
发布2023-10-24 16:21:59
1440
发布2023-10-24 16:21:59
举报
文章被收录于专栏:天罡gg天罡gg
前言

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

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

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

一、接口规划

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

  1. 图书基本信息API,我们最开始就已实现,如下图:
在这里插入图片描述
在这里插入图片描述

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

  1. 图书评论列表API(审核通过的) 之前实现的是/book/comment/list接口,查询的是全部的评论,这里需要根据角色做一下完善,代码完善3点: 对应图① 获取当前登录用户是否是管理员(isAdmin) 对应图② 当不是管理员时,增加status是审核通过的筛选条件 对应图③ 当是管理员时,才显示审核人
在这里插入图片描述
在这里插入图片描述

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

  1. 我是否收藏了该图书API 这是学生需要看到的收藏状态,也是本文我们新增的接口

二、编写服务层

在这里插入图片描述
在这里插入图片描述

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

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

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

代码语言:javascript
复制
@Service
public class FavoriteServiceImpl implements FavoriteService {

    @Autowired
    private BookFavoriteMapperExt bookFavoriteMapperExt;

    @Override
    public Integer getFavoriteId(Integer bookId, Integer userId) {
        BookFavorite bookFavorite = bookFavoriteMapperExt.selectByUserId(bookId, userId);
        return bookFavorite != null ? bookFavorite.getId() : null;
    }
}

三、编写数据访问层

在这里插入图片描述
在这里插入图片描述

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

代码语言:javascript
复制
public interface BookFavoriteMapperExt {
    BookFavorite selectByUserId(@Param("bookId") Integer bookId, @Param("userId") Integer userId);
}

BookFavoriteMapperExt.xml 定义如下:

代码语言:javascript
复制
<?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 a
            inner join student b on a.student_id = b.id
        where a.book_id = #{bookId}
            and b.user_id = #{userId}
            and is_cancelled = 0
        limit 1
    </select>

</mapper>

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


四、编写控制器

在这里插入图片描述
在这里插入图片描述

新增FavoriteController类:

代码语言:javascript
复制
@RestController
@RequestMapping("/favorite")
@Validated
public class FavoriteController {

    @Autowired
    private 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快速拥有企业级规范的项目实战经验!

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、接口规划
  • 二、编写服务层
  • 三、编写数据访问层
  • 四、编写控制器
  • 五、PostMan测试
    • 1. getBook 根据id获取图书
      • 2. getBookCommentList 根据id获取图书详情 - 评论列表
        • 3. getFavoriteId 获取学生收藏了某图书的收藏id
        • 最后
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档