MongoDB入门
MongoDB的java api的使用
SpringBoot整合MongoDB使用
搭建微聊系统
实现微聊功能
分布式WebSocket解决方案分析

1、MongoDB入门

1.1、MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。
MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
官网:https://www.mongodb.com
1.2、通过docker安装MongoDB

1.3、MongoDB基本操作
1.3.1、基本概念

为了更好的理解,下面与SQL中的概念进行对比:

1.3.2、数据库以及表的操作

1.3.3、新增数据
在MongoDB中,存储的文档结构是一种类似于json的结构,称之为bson(全称为:Binary JSON)。

1.3.4、更新数据
update() 方法用于更新已存在的文档。语法格式如下:

参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如 inc…)等,也可以理解为sql update查询内set后面的upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。


1.3.5、删除数据
通过remove()方法进行删除数据,语法如下:

参数说明:
query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。
实例:

1.3.6、查询数据
MongoDB 查询数据的语法格式如下:

query :可选,使用查询操作符指定查询条件
fields :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

pretty() 方法以格式化的方式来显示所有文档。
条件查询:

实例:


1.4、索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站 的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排 序的一种结构



1.5、执行计划
MongoDB 查询分析可以确保我们建议的索引是否有效,是查询语句性能分析的重要工具。


1.6、UI客户端工具
Robo 3T是MongoDB的客户端工具,我们可以使用它来操作MongoDB。
查看数据:

2、通过JavaApi操作MongoDB

2.1、创建itcast-mongodb工程
pom.xml

2.2、编写Demo
该demo中演示了,如何连接到MongoDB,如何选择数据库、表,进行查询的操作。


2.3、CURD操作



2.4、面向对象操作
前面对MongoDB的操作都是基于Document对象操作,操作略显繁琐,下面我们通过面向对象的方式进行操作。创建Person、Address对象:


编写测试用例:



3、SpringBoot整合MongoDB

spring-data对MongoDB做了支持,使用spring-data-mongodb可以简化MongoDB的操作。地址:https://spring.io/projects/spring-data-mongodb

第一步,导入依赖:

第二步,编写application.properties配置文件

第三步,编写PersonDao

第四步,编写启动类

第五步,编写单元测试

4、搭建微聊系统

下面我们开发微聊系统,实现好客租房项目的即时通讯功能。使用到的技术:

Spring WebSocket Spring-data-MongoDB
4.1、创建工程itcast-haoke-im
pom.xml:

4.2、编写Message对象

构造用户数据:


4.3、编写MessageDAO
定义MessageDAO接口:


编写实现类:


4.4、编写单元测试




4.5、编写websocket
4.5.1、发送消息流程

4.5.2、接收消息流程

4.5.3、实现





4.6、编写启动类

4.7、测试

4.8、提供查询历史消息的服务



测试:

4.9、提供查询用户列表服务(mock实现)
数据结构:



测试:

5、整合前端实现微聊功能

5.1、查询好友列表

chat.js:

效果:

5.2、好友单聊
chat-window.js文件:

效果:

5.3、发送消息
chat-window.js:

修改IMClient.js,不包装,直接发送数据:

测试:

5.4、接收消息
chat-window.js中,注册接收消息后的处理逻辑:


修改wsmain.js文件:


修改IMClient.js文件:

测试:
发送消息:

接收到消息:

可以看到,已经接收到了消息。
6、分布式Socket解决方案分析

问题:前面的实现中,将Session对象放到全局的Map中,当连接变得非常多时,这将成为了系统瓶颈,因为不能进行分布式部署。
解决方案:采用消息系统进行解决。

【ReactJs+springBoot项目——租房】第6章:MongoDB入门+SpringBoot整合MongoDB+搭建微聊系统+实现微聊功能相关推荐

  1. 【ReactJs+springBoot项目——租房】第14章:项目部署架构+部署计划 +实施部署 +打包项目+ 功能测试

    部署架构 部署计划 实施部署 打包项目 功能测试 1.部署架构 说明: 在架构中集群的节点数根据实际情况设置项目的中的实际系统并没有完全展示出来 2.部署计划 在实际项目中,在部署上线之前需要对所有的 ...

  2. 原创 【ReactJs+springBoot项目——租房】第13章:MySQL主从复制+MyCat数据库中间件+HAProxy+PXC集群

    分析目前系统架构中的数据库层存在的问题 分析MySQL数据库的集群方案 学习主从复制(读写分离)架构方案 掌握MyCat数据库中间件的使用 掌握HAProxy复制均衡的使用 掌握PXC集群的使用 多种 ...

  3. 【ReactJs+springBoot项目——租房】第3章:OSS存储图片+本地存储+ 房源列表查询+GraphQL入门

    图片存储解决方案的分析 阿里云OSS存储方案的实现 本地存储方案的实现 整合前端系统实现图片上传功能 实 现 房 源 列 表 查 询 功 能 GraphQL的入门 1.图片存储解决方案 在新增房源中, ...

  4. springboot项目文档源码_基于SpringBoot和Vue的企业级中后台项目(附源码)

    简介 SpringBoot和Vue,前后端分离,我们开源一套漂亮的代码和一套整洁的代码规范,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,热爱 ...

  5. idal 创建springboot 项目_SpringBoot教程:Maven方式创建SpringBoot项目

    一.Maven方式创建Spring Boot项目 1.配置Maven环境 在以maven方式创建Spring Boot项目之前,请先确保自己的Maven并配置好环境变量,并且在ideal中关联好mav ...

  6. 【SpringBoot】人工更新SpringBoot项目,Jar包太大问题解决,SpringBoot瘦包

    楼主也是刚接触SpringBoot几天,以前都是用SpringMVC开发,这里跟小伙伴们分享一个需求问题,如果有遇到的话可以继续往下看,能帮助到各位,是最好不过啦. 我们知道用SpringBoot开发 ...

  7. Springboot项目修改html后不需要重启---springboot项目的热部署

    一.spring-boot-devtools 在pom中直接引入依赖 <dependency><groupId>org.springframework.boot</gro ...

  8. springboot项目中怎样查看spring版本和springBoot版本号

    如下: java代码直接获取. import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.b ...

  9. springboot项目整合mybatis

    SpringBoot项目整合mybatis 本章内容 使用 idea创建 SpringBoot项目 SpringBoot项目中配制 mybatis 框架 1 创建 SpringBoot项目 1.1 在 ...

最新文章

  1. django orm级联_django+jquery 实现级联选择菜单
  2. 论文,范围管理(2017上)
  3. VC++下的OpenGL编程
  4. 51nod-猴猴吃香蕉【dp】
  5. 救人无数七个心理寓言
  6. 最新,最详细的LINUX图文配置教程|之DNS篇(1)
  7. c语言编程打印格式输出总结
  8. 高并发 问题怎么解决
  9. spring 中事物的说明
  10. 计算机常见故障判断与排除,计算机常见故障的诊断与排除PPT课件.ppt
  11. 稀疏矩阵乘法运算(C语言)
  12. 【BI学习作业04-ALS算法与推荐系统】
  13. 那些惊艳了岁月的诗词
  14. 无人机视觉检测算法研究及数据集汇总
  15. 第五届阿里天池中间件比赛经历分享-决赛
  16. HashMap源码学习——初探
  17. 合同和协议的区别_合同的内容包括哪些,合同和协议的区别
  18. java一个等号_java中等号的涵义
  19. 本地宝js爬虫(附代码)
  20. 链路层协议——以太网协议

热门文章

  1. iDeepWise深思考人工智能阅片系统 AI技术助力两癌筛查
  2. 自主招生计算机专业自我介绍,自主招生自我介绍范文
  3. crm软件实现零售的必要性
  4. 在 Win 7 下使用 VirtualBOX 虚拟机安装 OS X 10.8 Mountain Lion 及 Xcode 4.5
  5. InnoDB学习笔记一引擎架构及特性
  6. 从原理到代码 梳理姿态更新计算的四元数算法
  7. turtlebot+rplidar,安装所遇问题及解决方法
  8. 码妞:Java的一堆锁是干嘛的?能锁住体重吗?
  9. Linux综合实训案例教程,Linux操作系统教程-实训与项目案例原稿.ppt
  10. 海纳百川而来的一篇相当全面的Java NIO教程