云计算百科
云计算领域专业知识百科平台

黑马点评笔记(4)--达人探店

发布探店笔记:

探店笔记类似点评网站的评价,往往是图文结合。对应的表有两个:

  • tb_blog:探店笔记表,包含笔记中的标题、文字、图片等
  • tb_blog_comments:其他用户对探店笔记的评价

点击首页最下方菜单栏中的+按钮,即可发布探店图文:

代码导入:

上传照片:UploadController类下的uploadImage(),将传入的图片保存到nginx文件夹下(实际开发中会上传到云服务器上)

在utils/SystemConstants类中记得修改保存图片的目录

保存笔记:BlogController类下的saveBlog()方法,首先需要获取登录用户id并保存到对应blog中,然后再将blog保存到数据库

实现查看发布探店笔记的接口:

需求:点击首页的探店笔记,会进入详情页面,实现该页面的查询接口:

代码实现:

Controller层:BlogController下的queryBlogById()方法,调用BlogService的queryBlogById()方法

Service层:BlogServiceImpl类下的queryBlogById()方法,先根据id查询blog,再查询blog关联的用户和点赞信息,然后返回Result

isBlogLiked()方法:获取登录用户并判断当前用户是否已经点赞,如果未登录就不用判断

queryBlogUser()方法:根据传入的Blog类型变量的userId属性获取对应用户的信息,并存入blog中

另外还可以实现查询热点笔记的功能

Controller层:BlogController下的queryHotBlog()方法,调用BlogService的queryHotBlog()方法

Service层:BlogServiceImpl类下的queryHotBlog()方法,先查询一个page的最高点赞数的blog,然后转换为List,对List中的每一个blog都调用queryBlogUser()和isBlogLiked()方法,并返回result

点赞功能:

在首页的探店笔记排行榜和探店图文详情页面都有点赞的功能:

需求:

  • 同一个用户只能点赞一次,再次点击则取消点赞
  • 如果当前用户已经点赞,则点赞按钮高亮显示(前端已实现,判断字段Blog类的isLike属性)

实现步骤:

  • 1.给Blog类中添加一个isLike字段,标示是否被当前用户点赞
  • 2.修改点赞功能,利用Redis的set集合判断是否点赞过,未点赞过则点赞数+1,已点赞过则点赞数-1
  • 3.修改根据id查询blog的业务,判断当前登录用户是否点赞过,赋值给isLike字段
  • 4.修改分类查询blog业务,判断当前登录用户是否点赞过,赋值给isLike字段

代码实现:

Controller层:BlogController类下的likeBlog()方法,调用blogService类的likeBlog()方法

Service层:BlogServiceImpl类下的likeBlog()方法,先获取登录用户,并判断当前用户是否已经点赞。用户点赞的数据存在Redis中,使用set数据结构存储,key为blog id,value为点赞的用户id列表。我们使用当前用户id去redis中查询,如果查询到了就说明已经点过赞。接下来的逻辑为如果未点赞,则点赞,更新数据库让liked字段+1,如果已经点赞,则取消点赞,更新数据库让liked字段-1。最后把Redis中存储的点赞用户数据进行更新。

点赞排行榜:

在探店笔记的详情页面,应该把给该笔记点赞的人显示出来,比如最早点赞的top5,形成点赞排行榜

思路:实现点赞排行榜需要一个为每一个点赞数据添加一个值,根据这个值来对点赞进行排名,这里我们用时间戳作为这个值,并且在redis中使用zset代替set,对一个blog,它的点赞数据存在一个zset中,每个value有用户id和点赞时间,根据点赞时间进行排名

代码开发:

Controller层:BlogController类下的queryBlogLikes()方法,调用blogService的queryBlogLikes()方法

Service层:BlogServiceImpl类下的queryBlogLikes()方法,先根据blog的id去redis中查询top5的点赞用户,使用Zset的range key begin end操作,如果不为空则解析其中的用户ID,然后根据用户id去数据库中查询用户,这里用到了mybatis-plus的query()方法,并且在mysql中能根据指定的顺序返回结果,即order by field(id, ids)。最后将这些用户转换为UserDTO对象,存在一个List中并返回

赞(0)
未经允许不得转载:网硕互联帮助中心 » 黑马点评笔记(4)--达人探店
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!