SpringBoot集成MongoDB
前言
之前写了各种nosql数据库的比较,以及相关理论,现在我在本地以springboot+MongoDB框架,探究了具体的运行流程,下面总结一下,分享给大家。
运行前准备
安装并启动MongoDB应用程序
参考网址:
windows
http://www.runoob.com/mongodb/mongodb-window-install.html
linux
http://www.runoob.com/mongodb/mongodb-linux-install.html

在MongoDB应用工具中查询数据增删改效果(rebo3t)
下载地址:https://robomongo.org/download

lombok安装
参考网址:https://www.cnblogs.com/fqszywz/p/7733703.html
代码运行
代码下载:https://github.com/a123demi/spring-boot-integration
代码主要讲解
主要依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
数据库连接
spring.application.name=spirngboot-int-mongodbeg spring.data.mongodb.database=admin
spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.password=root
spring.data.mongodb.port=27017
spring.data.mongodb.username=root
通过MongoTemplate来调用各种增删改查的语句,比如
Query query=new Query(Criteria.where("userName").is(userName));
UserEntity user = mongoTemplate.findOne(query , UserEntity.class);
涉及的主要关键函数有
增
mongoTemplate.save(user);
删
mongoTemplate.remove(query,UserEntity.class);
改
Update update= new Update().set("userName", user.getUserName()).set("passWord", user.getPassWord());
//更新查询返回结果集的第一条
WriteResult result =mongoTemplate.updateFirst(query,update,UserEntity.class);
查
Query query=new Query(Criteria.where("userName").is(userName));
UserEntity user = mongoTemplate.findOne(query , UserEntity.class);
高级查询
分页查询
//利用工具类拼装分页信息
SpringbootMongoDBPageable pageable = new SpringbootMongoDBPageable();
MongoDBPageModel pm=new MongoDBPageModel();
pm.setPagesize(3);
pm.setPagenumber(1);
List<Order> orders = new ArrayList<>();
//排序信息
orders.add(new Order(Direction.DESC, "age"));
Sort sort = new Sort(orders);
pm.setSort(sort);
pageable.setPage(pm);
//拼装查询信息
Query query = new Query();
Criteria criteria = new Criteria();
query.addCriteria(criteria.where("age").gte(6).lte(18));
//检索6-18岁的
query.addCriteria(criteria.where("name").regex("文"));
//模糊查询名字
Long count = mongoTemplate.count(query, OrdersData.class);
//查询总记录数
List<Entry> list = mongoTemplate.find(query.with(pageable), Entry.class);
//分页聚合查询(多表多条件关联分页查询)
//mongodb中有两个表,一个是人物表 一个是宠物表,一个人可以有多个宠物
//人物表字段为 String id, Integer age,String remark;
//宠物表字段为 String id, String manId,String age,String remark;
//拼装分页信息
SpringbootMongoDBPageable pageable = new SpringbootMongoDBPageable();
MongoDBPageModel pm=new MongoDBPageModel();
pm.setPagesize(2);
pm.setPagenumber(1);
List<Order> orders = new ArrayList<>();
//排序
orders.add(new Order(Direction.DESC, "age"));
Sort sort = new Sort(orders);
pm.setSort(sort);
pageable.setPage(pm);
//拼装关联信息
LookupOperation lookupOperation = LookupOperation.newLookup(). from("dogData"). //关联表名
localField("_id"). //关联字段
foreignField("manId").//主表关联字段对应的次表字段
as("dogs");//查询结果集合名
//拼装具体查询信息
//次表
Criteria ordercri = Criteria.where("dogs").not().size(0);//只查询有宠物的人
ordercri.and("age").gte(1).lte(5);//只查询1岁到5岁的宠物
AggregationOperation match = Aggregation.match(ordercri);
//主表
Criteria qqq=Criteria.where("name").regex("文");//只查询名字中带有文的人
AggregationOperation match1= Aggregation.match(qqq);
//分页查询
Aggregation aggregation = Aggregation.newAggregation(match1,lookupOperation,match,Aggregation.sort(pageable.getSort()),//排序 Aggregation.skip(pageable.getPageNumber()>1?(pageable.getPageNumber()-1)*pageable.getPageSize():0),//pagenumber
Aggregation.limit(pageable.getPageSize()));//pagesize
//总数查询
Aggregation counts = Aggregation.newAggregation(match1,lookupOperation,match).; int count = mongoTemplate.aggregate(counts, "manEntry", BasicDBObject.class).getMappedResults().size(); List<BasicDBObject> results = mongoTemplate.aggregate(aggregation, "manEntry", BasicDBObject.class).getMappedResults(); //查询出的结果集为BasicDBObject类型
//解析过程
for (BasicDBObject b :results ) {
//转化为jsonobject对象
JSONObject jsonObject = new JSONObject(b);
String id = jsonObject.get("id").toString();
Integer age = ((int) jsonObject.get("age"));
String remark = jsonObject.get("remark").toString();
//转化为jsonarray
JSONArray dogs = jsonObject.getJSONArray("dogs");
if (dogs.size() > 0) {
for (int i = 0; i < dogs.size(); i++) {
JSONObject job = dogs.getJSONObject(i);
String dogId = job.get("id").toString();
String manId = job.get("manId").toString();
}
}
}
}
可参考网址:https://blog.csdn.net/weixin_39804646/article/details/82155898#commentBox
SpringBoot集成MongoDB的更多相关文章
- springboot集成mongoDB 异常认证
1.springboot连接mongoDB 出现异常认证 异常详情: com.mongodb.MongoSecurityException: Exception authenticating Mong ...
- SpringBoot集成MongoDB之导入导出和模板下载
前言 自己很对自己在项目中集成MongoDb做的导入导出以及模板下载的方法总结如下,有不到之处敬请批评指正! 1.pom.xml依赖引入 <!-- excel导入导出 --> <de ...
- springboot 集成mongodb
环境依赖 在pom文件引入spring-boot-starter-data-mongodb依赖: <dependency> <groupId>org.springframewo ...
- SpringBoot 集成mongodb(1)单数据源配置
新项目要用到mongodb,于是在个人电脑上的虚拟环境linux上安装了下mongodb,练习熟悉下. 1.虚拟机上启动mongodb. 首先查看虚拟机ip地址,忘了哈~~ 命令行>ifconf ...
- springboot集成mongoDB简易使用
1.首先是添加Spring Data mongo的配置依赖 <dependency> <groupId>org.springframework.boot</groupId ...
- Springboot集成MongoDB实现CRUD
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- springboot集成mongoDB需要认证
报错: Mon Nov 25 01:09:48 CST 2019 There was an unexpected error (type=Internal Server Error, status=5 ...
- SpringBoot 集成mongodb(2)多数据源配置
github:https://github.com/xiaozhuanfeng/mongoProj 现MongoDB有两个数据库: pom.xml: <!-- mongodb 配置 --> ...
- springboot集成mongodb实现动态切换数据源
主要实现原理,利用spring的aop 在切入点执行db操作之前 将数据库切换: 本例子采用aop在controller进行拦截 拦截到MongoTemplate.class 切换数据源后重新放回去 ...
随机推荐
- Emacs下scheme编程环境的设置
Scheme编程环境搭建 1.1 安装Chez Scheme git clone https://github.com/cisco/ChezScheme.git cd ChezScheme ./con ...
- C#6.0新语法
.自动属性初始化的改进(有用) 原来的用法(声明时无法同时初始化),例如: class MyClass { public int Age { get; set; } public string Nam ...
- HashTable源码简单介绍
首先是继承了字典类Dictionary, 这说明HashTable的一些找位置的实现与Dictionary有关, 看一看数据结构,是一个entry数组, Entry,这个不陌生,先看一下它的结构吧,这 ...
- Spring事务@Transactional标签深入学习
事务管理是应用系统开发中必不可少的一部分.Spring为事务管理提供了丰富的功能支持.Spring事务管理分为编码式和声明式 两种方式.编码式事务指的是通过编码方式实现事务;声明式事务基于AOP,将具 ...
- chown nagios:nagios -R /var/lib/php/
chown nagios:nagios -R /var/lib/php/
- WINAPI方式在windows不同缩放比下取得正确的分辨率
作者: 国家电网河南原阳县供电公司 俏狐:86074731 这个问题我在国内外的很多论坛查资料都没有找到,只有自己研究了,希望可以帮到需要的朋友.本文为原创,转 载请注明出处. #coding:utf ...
- python xlrd xlwt
1.什么是xlrd模块? 2.为什么使用xlrd模块? 3.怎样使用xlrd模块? 1.什么是xlrd模块? ♦python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel, ...
- 熟悉Junit单元测试方法
定义: JUnit是一个Java语言的单元测试框架.它由Kent Beck和Erich Gamma建立,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个. JUnit有它自己 ...
- linux下redis的安装方法
一.Linux环境下安装Redis Redis的官方下载网址是:http://redis.io/download (这里下载的是Linux版的Redis源码包) Redis服务器端的默认端口是6 ...
- CSS : color and unit
Color: CSS中定义颜色使用十六进制(hex)表示法为红,绿,蓝的颜色值结合.可以是最低值是0(十六进制00)到最高值是 255(十六进制FF).3个双位数字的十六进制值写法,以#符号开始部分颜 ...