MongoDB介绍与用法
MongoDB介绍
MongoDB是介于关系型和非关系型数据库之间的产品,nosql中最热门的数据库,存储数据是类似于JSON的bson格式的数据,可以存储复杂的数据类型,最大特点是它支持的查询语句非常强大
特点:
- 存储Bson数据
- 强大的查询语句
- 完整的索引支持
与MySQL的对比:
table-collection:表-集合 row-document:行-文档 column-field:列-域
SQL语句比MySQL更简单:
use+文档名:有切换没有创建
增删改查:
db.student.insert({key:value});
内置角色:超级用户、用户、管理员、集群管理员和备份恢复
作用:MongoDB中主要保存系统日志信息
MongoDB没有表连接,会自动在每个集合中添加_id主键
代码实现
MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); MongoDatabase database = mongoClient.getDatabase("test"); MongoCollection<Document> collection = database.getCollection("student"); Document myDoc = collection.find().first(); String json = myDoc.toJson();
项目介绍
用户通过在线练习、在线考试等学习内容,最终掌握所学的IT技能,并能在工作中熟练应用,学成在线采用B2B2C业务模式,即向企业或个人提供在线教育平台提供教学服务,老师和学生通过平台完成整个教学和学习的过程,市场上类似的平台有:网易云课堂、腾讯课堂等,学成在线的特点是IT职业课程在线教学
技术特点
采用当前流行的前后端分离架构开发
对一些图片、CSS、视频等资源从CDN(内容分发网络)调度访问提高访问速度
所有的请求全部经过负载均衡器
消息队列:存储系统服务间通信的消息,本身提供消息存取服务,与微服务层的系统服务连接
索引库:存储课程信息的索引信息,本身提供索引维护及搜索的服务,与微服务层的系统服务连接
缓存:作为系统的缓存服务,存储课程信息、分类信息、用户信息等,与微服务层的所有服务连接
文件存储:提供系统静态资源文件的分布式存储服务,文件存储服务器作为CDN服务器的数据来源,CDN上的静态资源将最终在文件存储服务器上保存多份
流媒体服务: 作为流媒体服务器,存储所有的流媒体文件 DevOps(开发运维): Eureka服务治理中心,提供服务治理服务 Spring
Cloud Config服务配置管理中心:提供服务配置管理服务 Hystrix
Dashboard服务熔断监控:监控熔断的请求响应时间、成功率 Zipkin服务 追踪监控:监控服务调用链路健康情况
Jenkins持续集成服务:提供系统持续集成服务
Git/GitLab代码管理服务:提供git代码管理服务
ELK日志分析服务:提供elk日志分析服务
Docker容器化部署服务:将本系统所有 服务采用容器化部署方式
Maven项目管理工具:提供管理项目所有的Java包依赖、项目工程打包服务
技术栈:
学成在线服务端基于Spring Boot构建,采用Spring Cloud微服务框架
持久层:MySQL、MongoDB、Redis、ElasticSearch
数据访问层:使用Spring Data JPA、Mybatis、Spring Data Mongodb等
业务层:Spring IOC、Aop事务控制、Spring Task任务调度、Feign、Ribbon、Spring AMQP、Spring Data Redis等
控制层:Spring MVC、FastJSON、RestTemplate、Spring Security Oauth2+JWT等
微服务治理:Eureka、Zuul、Hystrix、Spring Cloud Config等
开发步骤:
1、需求分析
2、接口定义
3、服务端和前端并行开发
4、前后端集成测试
CMS:内容管理系统,对所有网站页面及样式风格进行管理
本项目作为一个大型的在线教育平台,对CMS系统的定位是对各各网站(子站点)页面的管理,主要管理由于运营 需要而经常变动的页面,从而实现根据运营需要快速进行页面开发、上线的需求
前端页面部署
配置虚拟主机访问静态页面
通过server_name名字去访问location下指定路径下的index文件
server { listen 80; server_name www.xuecheng.com; ssi on; ssi_silent_errors on; location / { alias D:\Workspace\webstorm\xcEduUI\xc-ui-pc-static-portal/ ; index index.html; } }
通过域名访问localhost需要配置hosts文件,改host文件为:127.0.0.1 www.xuecheng.com
SSI服务器端嵌入
将多个页面合并起来
好处:
1、简化前端代码,避免代码臃肿
2、管理页面
nginx、apache等多数web容器都支持SSI指令
模板+数据就组成一个完整的页面
各工程作用:
parent工程:父工程,提供依赖管理
common工程:通用工程,提供各层封装
model工程:模型工程,提供统一的模型类管理
utils工程:工具类工程,提供本项目所使用的工具类
Api工程:接口工程,统一管理本项目的服务接口
页面查询接口
支持分页及自定义条件查询方式
1、分页查询CmsPage 集合下的数据
2、根据站点Id、模板Id、页面别名查询页面信息
3、Get请求,响应Json数据
Lombok作用:消除java代码的臃肿
三个页面模型类
CmsSite:站点模型、CmsTemplate:页面模板、CmsPage:页面信息
封装请求及响应参数
1、定义请求及响应类型QueryPageRequest
为后期扩展需求,请求类型统一继承RequestData类型
可以提交form表单数据、Json数据和文件等多部件类型
响应结果类型,分页查询统一使用QueryResponseResult ------响应信息待分析
Java枚举类:https://www.jianshu.com/p/ec3de3c6fc63
ResultCode:定义操作是否成功、操作代码和提示信息的接口
CommonCode:实现ResultCode接口的枚举类
QueryResponseResult继承ResponseResult,ResponseResult实现Response。Response定义成功的常量接口
响应结果统一信息为:是否成功、操作代码、提示信息及自定义数据
响应结果统一格式为json
在Api接口工程专门定义接口,在Api工程单独定义接口的原因如下:
1、接口集中管理
2、Api工程的接口将作为各微服务远程调用使用
页面查询接口:
req:页数、每页数、QueryPageRequest
resp:QueryResponseResult
引用spring-data-commons实现条件分页查询,拼接请求和响应参数。
ExampleMatcher:定义条件匹配器、 Pageable pageable = PageRequest.of(page, size); spring-data-commons是Spring Data Repository的抽象。 ExampleMatcher exampleMatcher = ExampleMatcher.matching() .withMatcher("pageAliase", ExampleMatcher.GenericPropertyMatchers.contains()); //实现自定义条件查询并且分页查询 Pageable pageable = PageRequest.of(page, size); Page<CmsPage> all = cmsPageRepository.findAll(example, pageable);
Mongodb数据库的查询:
引用Spring Data Mongodb依赖
同Spring Data JPA一样Spring Data mongodb也提供自定义方法的规则,如下: 按照findByXXX,findByXXXAndYYY、countByXXXAndYYY等规则定义方法,实现查询操作
Swagger:
当接口定义完成,可以使用工具生成接口文档
Spring Boot 可以集成Swagger,Swagger是全球最大的OAS开发工具框架,来规范RESTful服务开发过程
常用注解:
@Api:修饰整个类
@ApiOperation:修饰类中方法
@ApiParam:修饰方法中的单个参数
@ApiModel:修饰某个实体类
@ApiModelProperty:修饰实体类中的字段
@ApiImplicitParams:修饰多个请求参数
@ApiImplicitParam:修饰单个请求参数
@ApiIgnore:忽略某个api
接口生成工作原理:
1、系统启动,扫描到api工程中的Swagger2Configuration类
2、在此类中指定了包路径com.xuecheng,找到在此包下及子包下标记有@Api注解的ControllerApi接口
3、根据改接口中的Swagger注解生成接口文档