【探花交友】day03—MongoDB基础(一)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 【探花交友】day03—MongoDB基础

课程介绍

  • MongoDB环境搭建
  • MongoDB基本CRUD操作
  • 通过JavaApi操作MongoDB
  • SpringBoot整合MongoDB

1、通用设置

1.1 需求分析

1.1.1 需求分析

通用设置,包含探花交友APP基本的软件设置功能。包含:

设置陌生人问题:当平台其他用户想进行在线交流时需要回答陌生人问题。

通用设置:包含一些APP通知设置

黑名单:对于不感兴趣的用户设置黑名单屏蔽骚扰

1.1.2 数据库表

通用设置

1. CREATE TABLE `tb_settings` (
2.   `id` bigint(20) NOT NULL AUTO_INCREMENT,
3.   `user_id` bigint(20) DEFAULT NULL,
4.   `like_notification` tinyint(4) DEFAULT '1' COMMENT '推送喜欢通知',
5.   `pinglun_notification` tinyint(4) DEFAULT '1' COMMENT '推送评论通知',
6.   `gonggao_notification` tinyint(4) DEFAULT '1' COMMENT '推送公告通知',
7.   `created` datetime DEFAULT NULL,
8.   `updated` datetime DEFAULT NULL,
9. PRIMARY KEY (`id`)
10. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='设置表';

问题表

1. CREATE TABLE `tb_question` (
2.   `id` bigint(20) NOT NULL AUTO_INCREMENT,
3.   `user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
4.   `txt` varchar(200) DEFAULT NULL COMMENT '问题内容',
5.   `created` datetime DEFAULT NULL,
6.   `updated` datetime DEFAULT NULL,
7. PRIMARY KEY (`id`),
8.   KEY `user_id` (`user_id`)
9. ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

黑名单

1. CREATE TABLE `tb_black_list` (
2.   `id` bigint(20) NOT NULL AUTO_INCREMENT,
3.   `user_id` bigint(20) DEFAULT NULL,
4.   `black_user_id` bigint(20) DEFAULT NULL,
5.   `created` datetime DEFAULT NULL,
6.   `updated` datetime DEFAULT NULL,
7. PRIMARY KEY (`id`),
8.   KEY `user_id` (`user_id`)
9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='黑名单';

1.1.3 搭建提供者环境

实体类

(1) Settings

1. CREATE TABLE `tb_black_list` (
2.   `id` bigint(20) NOT NULL AUTO_INCREMENT,
3.   `user_id` bigint(20) DEFAULT NULL,
4.   `black_user_id` bigint(20) DEFAULT NULL,
5.   `created` datetime DEFAULT NULL,
6.   `updated` datetime DEFAULT NULL,
7. PRIMARY KEY (`id`),
8.   KEY `user_id` (`user_id`)
9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='黑名单';

(2)Question

1. @Data
2. @NoArgsConstructor
3. @AllArgsConstructor
4. public class Question extends BasePojo {
5. 
6. private Long id;
7. private Long userId;
8. //问题内容
9. private String txt;
10. 
11. }

(3)BlackList

1. @Data
2. @NoArgsConstructor
3. @AllArgsConstructor
4. public class BlackList extends BasePojo {
5. 
6. private Long id;
7. private Long userId;
8. private Long blackUserId;
9. }

mapper接口

(1)SettingsMapper

1. public interface SettingsMapper extends BaseMapper<Settings> {
2. }

(2)QuestionMapper

1. public interface QuestionMapper extends BaseMapper<Question> {
2. 
3. }

(3)BlackListMapper

1. public interface BlackListMapper extends BaseMapper<BlackList> {
2. 
3. }

api接口

(1) SettingApi

1. package com.tanhua.dubbo.api;
2. 
3. import com.tanhua.domain.db.Settings;
4. 
5. public interface SettingsApi {
6. 
7. }

(2)QuestionApi

1. package com.tanhua.dubbo.api;
2. 
3. import com.tanhua.domain.db.Question;
4. 
5. 
6. public interface QuestionApi {
7. 
8. }

(3)BlackListApi

1. package com.tanhua.dubbo.api;
2. 
3. import com.baomidou.mybatisplus.core.metadata.IPage;
4. import com.tanhua.domain.db.UserInfo;
5. 
6. public interface BlackListApi {
7. 
8. }

api服务实现类

(1)SettingServiceImpl

1. package com.tanhua.dubbo.api;
2. 
3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4. import com.tanhua.domain.db.Settings;
5. import com.tanhua.dubbo.mapper.SettingsMapper;
6. import org.apache.dubbo.config.annotation.Service;
7. import org.springframework.beans.factory.annotation.Autowired;
8. 
9. @DubboService
10. public class SettingsApiImpl implements SettingsApi {
11. 
12. @Autowired
13. private SettingsMapper settingsMapper;
14. 
15. }

(2)QuestionServiceImpl

1. package com.tanhua.dubbo.api;
2. 
3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4. import com.tanhua.domain.db.Question;
5. import com.tanhua.dubbo.mapper.QuestionMapper;
6. import org.apache.dubbo.config.annotation.Service;
7. import org.springframework.beans.factory.annotation.Autowired;
8. 
9. @DubboService
10. public class QuestionApiImpl implements QuestionApi {
11. 
12. @Autowired
13. private QuestionMapper questionMapper;
14. 
15. }

(3)BlackListServiceImpl

1. package com.tanhua.dubbo.api;
2. 
3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4. import com.baomidou.mybatisplus.core.metadata.IPage;
5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6. import com.tanhua.domain.db.BlackList;
7. import com.tanhua.domain.db.UserInfo;
8. import com.tanhua.dubbo.mapper.BlackListMapper;
9. import com.tanhua.dubbo.mapper.UserInfoMapper;
10. import org.apache.dubbo.config.annotation.Service;
11. import org.springframework.beans.factory.annotation.Autowired;
12. 
13. @DubboService
14. public class BlackListApiImpl implements BlackListApi {
15. 
16. @Autowired
17. private BlackListMapper blackListMapper;
18. }

1.2 查询通用设置

1.2.1 接口文档

1.2.2 代码实现

vo对象

1. @Data
2. @NoArgsConstructor
3. @AllArgsConstructor
4. public class SettingsVo implements Serializable {
5. 
6. private Long id;
7. private String strangerQuestion = "";
8. private String phone;
9. private Boolean likeNotification = true;
10. private Boolean pinglunNotification = true;
11. private Boolean gonggaoNotification = true;
12. 
13. }

SettingsController

tanhua-server工程创建SettingsController完成代码编写

1. @RestController
2. @RequestMapping("/users")
3. public class SettingsController {
4. 
5. @Autowired
6. private SettingsService settingsService;
7. 
8. /**
9.      * 查询通用设置
10.      */
11. @GetMapping("/settings")
12. public ResponseEntity settings() {
13. SettingsVo vo = settingsService.settings();
14. return ResponseEntity.ok(vo);
15.     }
16. }

SettingService

tanhua-server工程创建SettingService完成代码编写

1. @Service
2. public class SettingsService {
3. 
4. @DubboReference
5. private QuestionApi questionApi;
6. 
7. @DubboReference
8. private SettingsApi settingsApi;
9. 
10. @DubboReference
11. private BlackListApi blackListApi;
12. 
13. //查询通用设置
14. public SettingsVo settings() {
15. SettingsVo vo = new SettingsVo();
16. //1、获取用户id
17. Long userId = UserHolder.getUserId();
18.         vo.setId(userId);
19. //2、获取用户的手机号码
20.         vo.setPhone(UserHolder.getMobile());
21. //3、获取用户的陌生人问题
22. Question question = questionApi.findByUserId(userId);
23. String txt = question == null ? "你喜欢java吗?" : question.getTxt();
24.         vo.setStrangerQuestion(txt);
25. //4、获取用户的APP通知开关数据
26. Settings settings = settingsApi.findByUserId(userId);
27. if(settings != null) {
28.             vo.setGonggaoNotification(settings.getGonggaoNotification());
29.             vo.setPinglunNotification(settings.getPinglunNotification());
30.             vo.setLikeNotification(settings.getLikeNotification());
31.         }
32. return vo;
33.     }
34. }

QuestionApi

在tanhua-dubbo中的QuestionApiQuestionApiImpl补充方法

1. @Override
2. public Question findByUserId(Long userId) {
3.     QueryWrapper<Question> qw = new QueryWrapper<>();
4.     qw.eq("user_id",userId);
5. return questionMapper.selectOne(qw);
6. }

SettingApi

在tanhua-dubbo中的SettingApiSettingApiImpl补充方法

1. //根据用户id查询
2. public Settings findByUserId(Long userId) {
3.     QueryWrapper<Settings> qw = new QueryWrapper<>();
4.     qw.eq("user_id",userId);
5. return settingsMapper.selectOne(qw);
6. }



相关实践学习
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
相关文章
|
NoSQL API MongoDB
【探花交友】day03—MongoDB基础(四)
【探花交友】day03—MongoDB基础(四)
85 0
|
存储 NoSQL Java
【探花交友】day03—MongoDB基础(五)
【探花交友】day03—MongoDB基础(五)
97 0
|
存储 SQL JSON
【探花交友】day03—MongoDB基础(三)
【探花交友】day03—MongoDB基础(三)
105 0
|
存储 NoSQL Java
【探花交友】day03—MongoDB基础(二)
【探花交友】day03—MongoDB基础(二)
105 0
|
存储 SQL NoSQL
【探花交友】学习MongoDB快速入门上手
【探花交友】学习MongoDB快速入门上手
101 0
【探花交友】学习MongoDB快速入门上手
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
8天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
39 15
|
16天前
|
存储 NoSQL 关系型数据库
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
我们的风控系统引入阿里云数据库MongoDB版后,解决了特征类字段灵活加减的问题,大大提高了开发效率,极大的提升了业务用户体验,获得了非常好的效果
阿里云数据库MongoDB版助力信也科技 打造互联网金融企业样板
|
1月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。