仿牛客网笔记 点赞

534 阅读2分钟

对谁点赞? 帖子和评论和回复

1.点一下点赞 点两下取消赞

2.首页统计帖子的点赞数量

3.详情页统计评论点赞数量和状态(即已赞

将数据存在redis

由于数据访问层过于简单 可直接写业务层 存取数据直接调用redistemplate

写一个专门生成key的工具类

string一个 split常量为“:”和前缀“like:entity”

编写一个静态方法 将变量和常量进行拼接

传入实体类型实体id:entityType和entityId 表示帖子还是评论还是回复

用set可存储userId 可以知道谁给点的赞

开发业务组件:LikeService

注入redisTemplate

实现点赞业务方法:

like(userId,entityType,entityId)

通过工具类生成redis的key:entityLikeKey

通过boolean isMenmer=redisTemplate.opsForSet.isMenmber(entityLikeKey,userId)

判断是否已点赞 没点赞则add进set 有点赞则从set中remove

查询点赞数量的方法:findEntityLikeCount

依然要用到entityLikeKey

return set的数量 即redisTemplate.opsForSet().size(entityLikeKey)

查询某人是否对实体点赞 本来可以返回布尔

但考虑到后期功能增加 可能有👎功能 所以用int表示状态

findEntityLikeStatus

也要entityLikeKey

通过上面的ismenber变量来判断

redisTemplate.opsForSet().isMenmber(entityLikeKey,userId)

表现层LikeController

注入service不用说

还要注入当前的用户即注入hostHolder

通过requesMapping声明路径 post方法

@ResponsBody

like方法需把实体entityType和id传入

通过hostHolder.getUser()得到当前用户 (这里以后会用到spring sucurity 来重构 暂时就不判断用户会不会null

service调用like方法 把用户id 实体类型 实体ID传入

点赞数量通过service调用findEntityLikeCount得到

参数得传入实体类型和实体ID

状态就通过findEntityLikeStatus 参数多传一个userId

这俩值需要传给页面 那就考虑用map封装一下 map.put

最终return一个json数据 CommunityUtil.getJSONString把map传回页面

首页显示赞的数量要到HomeController这个控制首页的controller去写 **一样是likeservice调用

**findEntityLikeCount 实体类型传入“帖子” 再传入帖子的ID即可 最后仍然是add到mao里去

帖子详情页面的赞数量和状态

就到discusspost那个controller

方法和上面一样

还有状态 当前用户是否点过赞

就用service调用findEntityLikeStatus 传入参数 当前用户hostHolder.getuser.getid,实体类

型"帖子“ 帖子id dicusspostid

同样加入map

注意 判断hostholder是否null 没登陆肯定没有点赞

评论和恢复有关于点赞的操作大致相同 把参数换成对应的参数就好了

还有就是把数据传进对应的的vo对象