【探花交友】day04—圈子功能实现(二)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 【探花交友】day04—圈子功能实现(二)

4、圈子实现

3.1、环境搭建

Mongodb中实现字段的自增:两种解决方法(1、使用redis保证自动增长,2、使用mongodb自定义表)

3.1.1、mongo主键自增

第一步:创建实体类

1. package com.tanhua.domain.mongo;
2. 
3. import lombok.AllArgsConstructor;
4. import lombok.Data;
5. import lombok.NoArgsConstructor;
6. import org.bson.types.ObjectId;
7. import org.springframework.data.annotation.Id;
8. import org.springframework.data.mongodb.core.mapping.Document;
9. import org.springframework.data.mongodb.core.mapping.Field;
10. 
11. @Document(collection = "sequence")
12. @Data
13. @AllArgsConstructor
14. @NoArgsConstructor
15. public class Sequence {
16. 
17. private ObjectId id;
18. 
19. private long seqId; //自增序列
20. 
21. private String collName;  //集合名称
22. }

第二步:编写service

1. package com.tanhua.dubbo.utils;
2. 
3. import com.tanhua.domain.mongo.Sequence;
4. import org.springframework.beans.factory.annotation.Autowired;
5. import org.springframework.data.mongodb.core.FindAndModifyOptions;
6. import org.springframework.data.mongodb.core.MongoTemplate;
7. import org.springframework.data.mongodb.core.query.Criteria;
8. import org.springframework.data.mongodb.core.query.Query;
9. import org.springframework.data.mongodb.core.query.Update;
10. import org.springframework.stereotype.Component;
11. 
12. @Component
13. public class IdWorker {
14. 
15. @Autowired
16. private MongoTemplate mongoTemplate;
17. 
18. public Long getNextId(String collName) {
19. Query query = new Query(Criteria.where("collName").is(collName));
20. 
21. Update update = new Update();
22.         update.inc("seqId", 1);
23. 
24. FindAndModifyOptions options = new FindAndModifyOptions();
25.         options.upsert(true);
26.         options.returnNew(true);
27. 
28. Sequence sequence = mongoTemplate.findAndModify(query, update, options, Sequence.class);
29. return sequence.getSeqId();
30.     }
31. }

3.1.2、实体类

写到tanhua-domain工程中:

Movement

Movement:发布信息表(总记录表数据)

1. package com.tanhua.domain.mongo;
2. 
3. import lombok.AllArgsConstructor;
4. import lombok.Data;
5. import lombok.NoArgsConstructor;
6. import org.bson.types.ObjectId;
7. import org.springframework.data.mongodb.core.mapping.Document;
8. 
9. import java.util.List;
10. 
11. //动态详情表
12. @Data
13. @NoArgsConstructor
14. @AllArgsConstructor
15. @Document(collection = "movement")
16. public class Movement implements java.io.Serializable {
17. 
18. 
19. private ObjectId id; //主键id
20. private Long pid; //Long类型,用于推荐系统的模型(自动增长)
21. private Long created; //发布时间
22. private Long userId;
23. private String textContent; //文字
24. private List<String> medias; //媒体数据,图片或小视频 url
25. private String longitude; //经度
26. private String latitude; //纬度
27. private String locationName; //位置名称
28. private Integer state = 0;//状态 0:未审(默认),1:通过,2:驳回
29. }

MovementTimeLine

MovementTimeLine:好友时间线表,用于存储好友发布(或推荐)的数据,每一个用户一张表进行存储

1. package com.tanhua.domain.mongo;
2. 
3. import lombok.AllArgsConstructor;
4. import lombok.Data;
5. import lombok.NoArgsConstructor;
6. import org.bson.types.ObjectId;
7. import org.springframework.data.mongodb.core.mapping.Document;
8. 
9. /**
10.  * 好友时间线表,用于存储好友发布的数据
11.  */
12. @Data
13. @NoArgsConstructor
14. @AllArgsConstructor
15. @Document(collection = "movement_timeLine")
16. public class MovementTimeLine implements java.io.Serializable {
17. 
18. private static final long serialVersionUID = 9096178416317502524L;
19. private ObjectId id;
20. private ObjectId movementId;//动态id
21. private Long userId;   //发布动态用户id
22. private Long friendId; // 可见好友id
23. private Long created; //发布的时间
24. }

Friend

Friend 好友关系表

1. package com.tanhua.domain.mongo;
2. 
3. import lombok.AllArgsConstructor;
4. import lombok.Data;
5. import lombok.NoArgsConstructor;
6. import org.bson.types.ObjectId;
7. import org.springframework.data.mongodb.core.mapping.Document;
8. 
9. /**
10.  * 好友表:好友关系表
11.  */
12. @Data
13. @NoArgsConstructor
14. @AllArgsConstructor
15. @Document(collection = "friend")
16. public class Friend implements java.io.Serializable{
17. 
18. private static final long serialVersionUID = 6003135946820874230L;
19. private ObjectId id;
20. private Long userId; //用户id
21. private Long friendId; //好友id
22. private Long created; //时间
23. 
24. }

3.1.3、API接口

1. package com.tanhua.dubbo.api.mongo;
2. 
3. import com.tanhua.domain.mongo.Publish;
4. import com.tanhua.domain.vo.PageResult;
5. 
6. public interface MovementApi {
7. 
8. }

3.1.4、API实现类

1. package com.tanhua.dubbo.api.mongo;
2. 
3. import com.tanhua.domain.mongo.*;
4. import com.tanhua.domain.vo.PageResult;
5. import com.tanhua.dubbo.utils.IdService;
6. import org.apache.dubbo.config.annotation.Service;
7. import org.bson.types.ObjectId;
8. import org.springframework.beans.factory.annotation.Autowired;
9. import org.springframework.data.domain.PageRequest;
10. import org.springframework.data.domain.Pageable;
11. import org.springframework.data.domain.Sort;
12. import org.springframework.data.mongodb.core.MongoTemplate;
13. import org.springframework.data.mongodb.core.query.Criteria;
14. import org.springframework.data.mongodb.core.query.Query;
15. 
16. import java.util.ArrayList;
17. import java.util.List;
18. 
19. @Service
20. public class MovementApiImpl implements PublishApi {
21. 
22. }

3.1.5、MovementsController

1. package com.tanhua.server.controller;
2. 
3. import com.tanhua.domain.mongo.Publish;
4. import com.tanhua.server.service.MovementsService;
5. import org.springframework.beans.factory.annotation.Autowired;
6. import org.springframework.http.ResponseEntity;
7. import org.springframework.web.bind.annotation.*;
8. import org.springframework.web.multipart.MultipartFile;
9. 
10. import java.io.IOException;
11. 
12. @RestController
13. @RequestMapping("/movements")
14. public class MovementsController {
15. 
16. @Autowired
17. private MovementsService movementsService;
18. 
19. }

3.1.6、MovementsService

1. package com.tanhua.server.service;
2. 
3. import com.tanhua.autoconfig.templates.OssTemplate;
4. import com.tanhua.domain.db.UserInfo;
5. import com.tanhua.domain.mongo.Publish;
6. import com.tanhua.domain.vo.Movements;
7. import com.tanhua.domain.vo.PageResult;
8. import com.tanhua.dubbo.api.UserInfoApi;
9. import com.tanhua.dubbo.api.mongo.PublishApi;
10. import com.tanhua.server.interceptor.UserHolder;
11. import io.jsonwebtoken.lang.Collections;
12. import org.apache.dubbo.config.annotation.Reference;
13. import org.springframework.beans.BeanUtils;
14. import org.springframework.beans.factory.annotation.Autowired;
15. import org.springframework.http.ResponseEntity;
16. import org.springframework.stereotype.Service;
17. import org.springframework.util.StringUtils;
18. import org.springframework.web.multipart.MultipartFile;
19. 
20. import java.io.IOException;
21. import java.text.SimpleDateFormat;
22. import java.util.*;
23. 
24. @Service
25. public class MovementsService {
26. 
27. @Autowired
28. private OssTemplate ossTemplate;
29. 
30. @DubboReference
31. private MovementApi movementApi;
32. 
33. @DubboReference
34. private UserInfoApi userInfoApi;
35. 
36. @Autowired
37. private RedisTemplate<String,String> redisTemplate;
38. }
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
6月前
|
存储 NoSQL API
day04—圈子功能实现
day04—圈子功能实现
45 1
|
API
【探花交友】day04—圈子功能实现(三)
【探花交友】day04—圈子功能实现(三)
82 0
|
存储 SQL 缓存
【探花交友】day04—圈子功能实现(一)
【探花交友】day04—圈子功能实现
117 0
|
存储 NoSQL 搜索推荐
【探花交友】day05—圈子互动(上)
【探花交友】day05—圈子互动
117 0
|
NoSQL API Redis
【探花交友】day05—圈子互动(下)
【探花交友】day05—圈子互动(下)
132 0
|
Dubbo 应用服务中间件 测试技术
【探花交友】day07—搜附近(三)
【探花交友】day07—搜附近(三)
190 0
|
存储 NoSQL Dubbo
【探花交友】day07—搜附近(二)
【探花交友】day07—搜附近(二)
140 0
|
Dubbo NoSQL 测试技术
【探花交友】day07—搜附近(一)
【探花交友】day07—搜附近
123 0
|
NoSQL 程序员 API
【探花交友】day06—即时通信(三)
【探花交友】day06—即时通信(三)
115 0
|
消息中间件 NoSQL 前端开发
【探花交友】day06—即时通信(一)
【探花交友】day06—即时通信
174 0