项目持续更新中:
目录
我们把mongoDB整合到Springboot之后,我们需要把映射层面做好。
首先在model创建一个新的对象层面,也就是一个新的包:
我们这里简写为mo
随后创建一个class,与我们当前业务对象保持一致:
- package com.imooc.mo;
-
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import lombok.NoArgsConstructor;
- import lombok.ToString;
- import org.springframework.data.annotation.Id;
- import org.springframework.data.mongodb.core.mapping.Document;
- import org.springframework.data.mongodb.core.mapping.Field;
-
- import java.util.Date;
- import java.util.Map;
-
- @Data
- @AllArgsConstructor
- @NoArgsConstructor
- @ToString
- @Document("message")
- public class MessageMO {
-
- @Id
- private String id;//消息主键id
-
- @Field("fromUserId")
- private String fromUserId;//消息来自的用户id
-
- @Field("fromNickId")
- private String fromNickId;//消息来自的用户昵称
-
- @Field("fromFace")
- private String fromFace;//消息来自的用户头像
-
- @Field("toUserId")
- private String toUserId;//消息来自的用户id
-
- @Field("msgType")
- private Integer msgType;//消息类型 枚举
-
- @Field("msgContent")
- private Map msgContent;//消息内容
-
- @Field("createTime")
- private Date createTime;//消息创建时间
- }
有了对象之后,就要争对对象进行操作,也就是我们的业务层:
接着就要实现:
我们以前使用的通用的mapper,在这里我们要和mongoDB做交互,我们这里使用的repository也是需要接口去构建的,我们在数据层中新建一个包,再添加一个:
我们可以把MessageRepository当成一个通用Mapper,因为它集成了很多的方法
- import com.imooc.pojo.Users;
- import com.imooc.repository.MessageRepository;
- import com.imooc.service.MsgService;
- import com.imooc.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.Date;
- import java.util.Map;
-
- @Service
- public class MsgServiceImpl implements MsgService {
-
- @Autowired
- private MessageRepository messageRepository;
-
- @Autowired
- private UserService userService;
-
- @Override
- public void createMsg(String fromUserId,
- String toUserId,
- Integer type,
- Map msgContent){
-
- Users fromUser = userService.getUser(fromUserId);
- MessageMO messageMO = new MessageMO();
- messageMO.setFromUserId(fromUserId);
- messageMO.setFromNickId(fromUser.getNickname());
- messageMO.setFromFace(fromUser.getFace());
-
- messageMO.setToUserId(toUserId);
-
- messageMO.setMsgType(type);
- if(msgContent != null){
- messageMO.setMsgContent(msgContent);
- }
-
- messageMO.setCreateTime(new Date());
-
- messageRepository.save(messageMO);
- }
-
- }
这里就完成了我们业务层的编写。
接下来我们需要把调用的地方做一个完善,基于以下五种我们就要做一个消息的入库
在我们的doFollow关注结束之后,我们要去提示对方用户某某人关注了你
//系统消息:关注 msgService.createMsg(myId,vlogerId, MessageEnum.FOLLOW_YOU.type, null );
我们这里关注的内容是不需要进行展示的,所以在这里只需要传入一个null
随后我们重新启动一下,做一个关注,
刷新一下打开mongoDB
这个就是我们的数据
mongoDB当字段为null时,该数据是不会存在的
当我们插入数据完成之后,系统也需要发送一条点赞短视频的消息
点赞短视频我们是需要把短视频的封面给得到的
所以我们在设置的时候要传入vlogCover
- //系统消息:点赞短视频
- Vlog vlog = this.getVlog(vlogId);
- Map msgContent = new HashMap();
- msgContent.put("vlogId",vlogId);
- msgContent.put("vlogCover",vlog.getCover());
- msgService.createMsg(userId,
- vlog.getVlogerId(),
- MessageEnum.LIKE_VLOG.type,
- msgContent);
- }
- private Vlog getVlog(String id){
- return vlogMapper.selectByPrimaryKey(id);
- }
重新启动,测试:
点赞这个视频
随后我们到数据库中看一下
主要是看后方,此时是多了一个数据
这里我们可以将评论和回复评论放在一起去处理
这里我们需要对public Vlog getVlog(String id)扩展 重新,写入接口
在这里就可以查询
- //系统消息:评论/回复
- Vlog vlog = vlogService.getVlog(commentBO.getVlogId());
- Map msgContent = new HashMap();
- msgContent.put("vlogId",vlog.getId());
- msgContent.put("vlogCover",vlog.getCover());
- msgContent.put("commentId",commentId);
- msgContent.put("commentContent",commentBO.getContent());
- Integer type= MessageEnum.COMMENT_VLOG.type;
- if(StringUtils.isNotBlank(commentBO.getFatherCommentId()) && !commentBO.getFatherCommentId().equalsIgnoreCase("0")){
- type = MessageEnum.REPLY_YOU.type;
- }
-
- msgService.createMsg(commentBO.getCommentUserId(),
- commentBO.getVlogerId(),
- type,
- msgContent);
- return commentVO;
接着我们重启测试:
接着到我们的mongoDB中查看:
此时我们可以发现这里的内容,对于前两天数据是空的
接着我们回复测试:
再来刷新:
这里就完成了我们系统消息对评论与回复的保存。