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

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

1.2 陌生人问题

对数据库表进行操作:如果存在数据,更新数据库。如果不存在数据,保存数据库表数据

1.2.1 接口文档

1.2.2 代码实现

SettingsController

1. /**
2.  * 设置陌生人问题
3.  */
4. @PostMapping("/questions")
5. public ResponseEntity questions(@RequestBody Map map) {
6. //获取参数
7. String content = (String) map.get("content");
8.     settingsService.saveQuestion(content);
9. return ResponseEntity.ok(null);
10. }

SettingsService

1. //设置陌生人问题
2. public void saveQuestion(String content) {
3. //1、获取当前用户id
4. Long userId = UserHolder.getUserId();
5. //2、调用api查询当前用户的陌生人问题
6. Question question = questionApi.findByUserId(userId);
7. //3、判断问题是否存在
8. if(question == null) {
9. //3.1 如果不存在,保存
10.         question = new Question();
11.         question.setUserId(userId);
12.         question.setTxt(content);
13.         questionApi.save(question);
14.     }else {
15. //3.2 如果存在,更新
16.         question.setTxt(content);
17.         questionApi.update(question);
18.     }
19. }

QuestionApi

tanhua-dubbo工程中的QuestionApiQuestionApiImpl中添加保存和更新方法

1. @Override
2. public void save(Question question) {
3.     questionMapper.insert(question);
4. }
5. 
6. @Override
7. public void update(Question question) {
8.     questionMapper.updateById(question);
9. }

1.3 通知设置

1.3.1 接口文档

通知管理:对通知进行保存或者更新的操作

http://192.168.136.160:3000/project/19/interface/api/280

1.3.2 代码实现

SettingsController

1. /**
2.  * 通知设置
3.  */
4. @PostMapping("/notifications/setting")
5. public ResponseEntity notifications(@RequestBody Map map) {
6. //获取参数
7.     settingsService.saveSettings(map);
8. return ResponseEntity.ok(null);
9. }

SettingsService

1. //通知设置
2. public void saveSettings(Map map) {
3. boolean likeNotification = (Boolean) map.get("likeNotification");
4. boolean pinglunNotification = (Boolean) map.get("pinglunNotification");
5. boolean gonggaoNotification = (Boolean)  map.get("gonggaoNotification");
6. //1、获取当前用户id
7. Long userId = UserHolder.getUserId();
8. //2、根据用户id,查询用户的通知设置
9. Settings settings = settingsApi.findByUserId(userId);
10. //3、判断
11. if(settings == null) {
12. //保存
13.         settings = new Settings();
14.         settings.setUserId(userId);
15.         settings.setPinglunNotification(pinglunNotification);
16.         settings.setLikeNotification(likeNotification);
17.         settings.setGonggaoNotification(gonggaoNotification);
18.         settingsApi.save(settings);
19.     }else {
20.         settings.setPinglunNotification(pinglunNotification);
21.         settings.setLikeNotification(likeNotification);
22.         settings.setGonggaoNotification(gonggaoNotification);
23.         settingsApi.update(settings);
24.     }
25. }

SettingsApi

tanhua-dubbo工程中的SettingsApiSettingsApiImpl中添加保存和更新方法

1. @Override
2. public void save(Settings settings) {
3.     settingsMapper.insert(settings);
4. }
5. 
6. @Override
7. public void update(Settings settings) {
8.     settingsMapper.updateById(settings);
9. }

1.4 黑名单管理

1.3.1 接口文档

  • 查询黑名单列表

  • 移除黑名单

1.3.2 分页查询

vo对象

tanhua-domain工程的配置分页vo对象

1. package com.tanhua.domain.vo;
2. 
3. import lombok.AllArgsConstructor;
4. import lombok.Data;
5. import lombok.NoArgsConstructor;
6. 
7. import java.io.Serializable;
8. import java.util.Collections;
9. import java.util.List;
10. 
11. @Data
12. @AllArgsConstructor
13. @NoArgsConstructor
14. public class PageResult implements Serializable {
15. 
16. private Integer counts = 0;//总记录数
17. private Integer pagesize;//页大小
18. private Integer pages = 0;//总页数
19. private Integer page;//当前页码
20. private List<?> items = Collections.emptyList(); //列表
21. 
22. public PageResult(Integer page,Integer pagesize,
23. int counts,List list) {
24. this.page = page;
25. this.pagesize = pagesize;
26. this.items = list;
27. this.counts = counts;
28. this.pages = counts % pagesize == 0 ? counts / pagesize : counts / pagesize + 1;
29.     }
30. 
31. }

SettingsController

1. /**
2.  * 分页查询黑名单列表
3.  */
4. @GetMapping("/blacklist")
5. public ResponseEntity blacklist(
6. @RequestParam(defaultValue = "1") int page,
7. @RequestParam(defaultValue = "10") int size) {
8. //1、调用service查询
9. PageResult pr = settingsService.blacklist(page,size);
10. //2、构造返回
11. return ResponseEntity.ok(pr);
12. }
13. 
14. /**
15.  * 取消黑名单
16.  */
17. @DeleteMapping("/blacklist/{uid}")
18. public ResponseEntity deleteBlackList(@PathVariable("uid") Long blackUserId) {
19.     settingsService.deleteBlackList(blackUserId);
20. return ResponseEntity.ok(null);
21. }

SettingService

1. //分页查询黑名单列表
2. public PageResult blacklist(int page, int size) {
3. //1、获取当前用户的id
4. Long userId = UserHolder.getUserId();
5. //2、调用API查询用户的黑名单分页列表  Ipage对象
6.     IPage<UserInfo> iPage = blackListApi.findByUserId(userId,page,size);
7. //3、对象转化,将查询的Ipage对象的内容封装到PageResult中
8. PageResult pr = new PageResult(page,size,iPage.getTotal(),iPage.getRecords());
9. //4、返回
10. return pr;
11. }
12. 
13. //取消黑名单
14. public void deleteBlackList(Long blackUserId) {
15. //1、获取当前用户id
16. Long userId = UserHolder.getUserId();
17. //2、调用api删除
18.     blackListApi.delete(userId,blackUserId);
19. }

BlackListApi

1. @Override
2. public IPage<UserInfo> findByUserId(Long userId, int page, int size) {
3. //1、构建分页参数对象Page
4. Page pages = new Page(page,size);
5. //2、调用方法分页(自定义编写 分页参数Page,sql条件参数)
6. return userInfoMapper.findBlackList(pages,userId);
7. }
8. 
9. @Override
10. public void delete(Long userId, Long blackUserId) {
11.     QueryWrapper<BlackList> qw = new QueryWrapper<>();
12.     qw.eq("user_id",userId);
13.     qw.eq("black_user_id",blackUserId);
14.     blackListMapper.delete(qw);
15. }

UserInfoMapper

1. public interface UserInfoMapper extends BaseMapper<UserInfo> {
2. 
3. @Select("select * from tb_user_info where id in (\n" +
4.             "  SELECT black_user_id FROM tb_black_list where user_id=#{userId}\n" +
5.             ")")
6.     IPage<UserInfo> findBlackList(@Param("pages") Page pages, @Param("userId") Long userId);
7. }

MybatisPlusConfig

tanhua-dubbo-db引导类开启mybatis-plus分页插件支持

1. public interface UserInfoMapper extends BaseMapper<UserInfo> {
2. 
3. @Select("select * from tb_user_info where id in (\n" +
4.             "  SELECT black_user_id FROM tb_black_list where user_id=#{userId}\n" +
5.             ")")
6.     IPage<UserInfo> findBlackList(@Param("pages") Page pages, @Param("userId") Long userId);
7. }

使用mybatis-plus的分页:

  • 创建分页对象:Page,指定当前页和每页查询条数
  • 基础查询:mapper.selectPage(page,查询条件)
  • 自定义查询:Ipage 方法名称(Page对象,xxx查询条件)
相关实践学习
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 Java
【探花交友】day03—MongoDB基础(五)
【探花交友】day03—MongoDB基础(五)
97 0
|
存储 SQL JSON
【探花交友】day03—MongoDB基础(三)
【探花交友】day03—MongoDB基础(三)
105 0
|
存储 NoSQL Java
【探花交友】day03—MongoDB基础(二)
【探花交友】day03—MongoDB基础(二)
105 0
|
NoSQL Java API
【探花交友】day03—MongoDB基础(一)
【探花交友】day03—MongoDB基础
107 0
|
存储 SQL NoSQL
【探花交友】学习MongoDB快速入门上手
【探花交友】学习MongoDB快速入门上手
101 0
【探花交友】学习MongoDB快速入门上手
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
7天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
36 15
|
15天前
|
存储 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的最佳实践和职业心得,展望了云原生数据库的发展趋势。