springboot整合mongodb:

  mongodb的安装权限配置  请点击连接参考

mongodb集成 :

  第一步:引如pom文件 

    

  第二步:配置文件配置mongodb路径:

    

 

  第三步:关于mongodb的api操作整理如下:(这是根据springboot1.5.13版本做的整理,springboot2.x系列对mongodb的变动较大,后期我会整理发布)

  

package com.xf.water.springboot_mongdb;

import com.mongodb.*;
import com.xf.water.springboot_mongdb.entity.A;
import com.xf.water.springboot_mongdb.entity.MaxValue;
import com.xf.water.springboot_mongdb.entity.Sl6512014;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.aggregation.AggregationResults;
import org.springframework.data.mongodb.core.aggregation.GroupOperation;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.test.context.junit4.SpringRunner; import java.util.List; /**
* @author : huhy on 2018/7/31.
* @Project_name:springboot_self_gitlab
* @LOCAL:com.xf.water.springboot_mongdb
* @description:mongodb的操作
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class MongodbUtilsTest { @Autowired
private MongoTemplate mongoTemplate; @Test
public void test(){
Query query6 = new Query(Criteria.where("a").lte("9"));
//设置安装某一个子段进行降序
query6.with(new Sort(Sort.Direction.DESC,"a"));
query6.maxScan(6).skip(0);
List<A> a = mongoTemplate.find(query6, A.class, "a");
for (A a1 : a) {
System.out.println(a1);
}
}
/**
* @author huhy
* @ClassName:MongodbUtilsTest
* @date 2018/7/31 17:03
* @Description: 获取当前mongodb中的使用库和当前数据库的链接测试
*/
@Test
public void testConnAndMongodb(){
/**
* mongoTemplate.getDb() 获取当前数据库
* mongoTemplate.dropCollection("a") 删除集合
* 创建集合: 根据类型或者直接指定集合名创建 同时可是设置集合内部的参数信息,大小,文档类型等
* <T> DBCollection createCollection(Class<T> var1);
* <T> DBCollection createCollection(Class<T> var1, CollectionOptions var2);
* DBCollection createCollection(String var1);
* DBCollection createCollection(String var1, CollectionOptions var2);
* 集合是否存在:
* <T> boolean collectionExists(Class<T> var1); 根据类型判断
* boolean collectionExists(String var1); 根据集合名判断
* mongoTemplate.getCollectionNames(); 获取所有集合名的列表
*/
System.out.println(mongoTemplate.getDb());
MongoClientURI mongoClientURI = new MongoClientURI("mongodb://yang:123456@localhost:27017/huhy");
MongoClient mongoClient = new MongoClient(mongoClientURI);
System.out.println(mongoClient);
mongoTemplate.dropCollection("a");
mongoTemplate.createCollection(A.class);
mongoTemplate.collectionExists("a");
mongoTemplate.getCollectionNames();
}
/**
* @author huhy
* @ClassName:MongodbUtilsTest
* @date 2018/8/1 14:02
* @Description: 测试mongoTemplate的CRUD操作
*/
@Test
public void testMongdbTemplateCrud(){
/**
* 添加文档主要介绍两种方式:
* mongoTemplate.insert("实体对象","集合名"); 往集合插入数据的方式
* mongoTemplate.save(对象,集合名(可省略)); 参数必须是对象
* insert和save都适用
* 不写集合名,默认对象类名作为集合名(如实体类是A 集合名是a)
* 写集合名,则把数据写到对应集合下
* 1.void save(Object var1); 传入对象,不传集合名
* 2.void save(Object var1, String var2); 传入对象,传集合名
* 3.void insert(Object var1); 传入对象,不传集合名
* 4.void insert(Object var1, String var2); 传入对象,传集合名
* 5.void insert(Collection<? extends Object> var1, Class<?> var2); 下面三个方法是批量插入的实现方法
* 6.void insert(Collection<? extends Object> var1, String var2);
* 7.void insertAll(Collection<? extends Object> var1);
* 查询mongodb的操作:
* find 和findone方法都有两种实现
* 1.List<T> find(Query var1, Class<T> var2) 不指定集合名
* 2.List<T> find(Query var1, Class<T> var2, String var3) 指定集合名
* 3.<T> T findOne(Query var1, Class<T> var2); 不指定集合名
* 4.<T> T findOne(Query var1, Class<T> var2, String var3);指定集合名
* eg。
* maxvalue在数据库中就对应一个集合,可以不指定集合名直接查询
* Sl6512014 在数据对应很多集合 必须知道集合名才能查询出数据
*
* findall
* 1.<T> List<T> findAll(Class<T> var1); 根据类型查询所有
* 2.<T> List<T> findAll(Class<T> var1, String var2); 查询集合下的该类型数据
*
* findById:
* <T> T findById(Object var1, Class<T> var2); var1 是mongodb的_id子段值
* <T> T findById(Object var1, Class<T> var2, String var3); 指定集合名
* 更新操作:
* updateFirst 更新符合条件的第一条 updateMulti 更新多个,符合条件都会更改
* //修改第一条符合条件数据
* 1.WriteResult updateFirst(Query var1, Update var2, Class<?> var3); 指定类型
* 2.WriteResult updateFirst(Query var1, Update var2, String var3); 更新操作指定集合名
* 3.WriteResult updateFirst(Query var1, Update var2, Class<?> var3, String var4); 详细指定类型和集合名
* //批量修改
* 4.WriteResult updateMulti(Query var1, Update var2, Class<?> var3); 指定类型
* 5.WriteResult updateMulti(Query var1, Update var2, String var3); 指定集合名
* 6.WriteResult updateMulti(Query var1, Update var2, Class<?> var3, String var4); 详细指定类型和集合名
* //同updateFirst
* 7.WriteResult upsert(Query var1, Update var2, Class<?> var3);
* 8.WriteResult upsert(Query var1, Update var2, String var3);
* 9.WriteResult upsert(Query var1, Update var2, Class<?> var3, String var4);
* 删除操作:
* 1.WriteResult remove(Object var1);
* 2.WriteResult remove(Object var1, String var2);
* 3.WriteResult remove(Query var1, Class<?> var2); 根据条件删除
* 4.WriteResult remove(Query var1, Class<?> var2, String var3); 详细指定类型和集合名进行删除
* 5.WriteResult remove(Query var1, String var2); 指定集合名进行删除
* 其他一些操作:简单介绍:
* //查询出后删除
* <T> List<T> findAllAndRemove(Query var1, String var2); 指定集合名
<T> List<T> findAllAndRemove(Query var1, Class<T> var2); 指定类型
<T> List<T> findAllAndRemove(Query var1, Class<T> var2, String var3); 在集合下查询删除的类型数据
//查处后修改
<T> T findAndModify(Query var1, Update var2, Class<T> var3); 指定修改类型
<T> T findAndModify(Query var1, Update var2, Class<T> var3, String var4); 在集合下修改的数据类型
<T> T findAndModify(Query var1, Update var2, FindAndModifyOptions var3, Class<T> var4);
<T> T findAndModify(Query var1, Update var2, FindAndModifyOptions var3, Class<T> var4, String var5);
<T> T findAndRemove(Query var1, Class<T> var2);
<T> T findAndRemove(Query var1, Class<T> var2, String var3);
//判断是否存在
boolean exists(Query var1, String var2);
boolean exists(Query var1, Class<?> var2);
boolean exists(Query var1, Class<?> var2, String var3);
*/
//insert操作
//mongoTemplate.save(new A("1","2","3"));
//mongoTemplate.insert(new A("1","2","3"));
Query query = new Query(Criteria.where("a").is("11"));
//find操作
/*Sl6512014 sl6512014_1 = mongoTemplate.findOne(query, Sl6512014.class);
Sl6512014 sl6512014_2 = mongoTemplate.findOne(query, Sl6512014.class,"1");
List<Sl6512014> sl6512014_3 = mongoTemplate.find(query, Sl6512014.class);
List<Sl6512014> sl6512014_4 = mongoTemplate.find(query, Sl6512014.class,"1");
System.out.println(sl6512014_1);*/
//update操作
/* Update update= new Update();
A a = mongoTemplate.findOne(query, A.class);
System.out.println(a);
update.set("a","1");*/
//更新两种方式
//mongoTemplate.updateFirst(query,update,A.class);
//mongoTemplate.updateFirst(query,update,"a");
// mongoTemplate.updateMulti(query,update,"a");
//mongoTemplate.upsert(query,update,A.class);
//mongoTemplate.remove(query,"a"); //测试一些其他方法
System.out.println(mongoTemplate.findById("5b615babec6032159050d879",A.class)); }
/**
* @author huhy
* @ClassName:MongodbUtilsTest
* @date 2018/7/31 17:17
* @Description: DBCollection下的简单使用
*/
@Test
public void testDBCollection(){
/**
* mongoTemplate.getCollection("error") 获取集合 一般获取之前判断是否存在
* collection.getCount() 集合下又有多少数据
* collection.find().next() 获取集合的第一条符合要求的数据
* collection.getFullName() 返回当前库+集合的名字组合
* collection.getName() 返回集合名
* collection.rename("fail") 修改集合名
* collection.distinct("ut") 返回值是list集合,返回的是ut的集合,并进行去重
* collection.createIndex("huhy") 在error集合上创建一个index 名字是huhy_1 不存在就创建 */
DBCollection collection = mongoTemplate.getCollection("error");
//这个集合下的数据量
System.out.println(collection.getCount());
//返回值是list集合,返回的是ut的集合,并进行去重
List serial = collection.distinct("ut");
System.out.println(serial);
DBCursor dbObjects = collection.find();
//next只会查询出符合条件的第一个数据
System.out.println(dbObjects.next());
//返回的库名+集合名
String fullName = collection.getFullName();
System.out.println(fullName);
//返回的集合名
System.out.println(collection.getName());
System.out.println(collection.getHintFields());
long count = collection.count();
System.out.println(count); // 有四种创建索引的方式,自己看api
collection.createIndex("yang"); }
/**
* @author huhy
* @ClassName:MongodbUtilsTest
* @date 2018/8/1 9:40
* @Description:Query的用法
* maxvalue在数据库中就对应一个集合,可以不指定集合名直接查询
* Sl6512014 在数据对应很多集合 必须知道集合名才能查询出数据
*/
@Test
public void testMongodbQuery(){
/**
* is相当于等于
* in相当于sql中的in
* ne相当于不等于
* orOperator接受多个条件,组成or逻辑 addOperator同理
* Criteria.where("author").is("mongodb") author = mongodb的数据
* Criteria.where("serial").lte(500).and("st").is("1703230781").and("c").in("5.7") 多条件的查询
* Criteria.where("st").exists(true) 判断这个字段存在
* Criteria.where("serial").ne(1) 不等于1的数据
* Criteria.where("serial").nin(1) nin 不在这个范围中
* Criteria.where("serial").is(3).orOperator().is().andOperator() 追加or条件或者and条件
* Criteria.where("a").regex("1") 模糊查询 可以用正则表达式
* query6.with(new Sort(Sort.Direction.DESC,"a")); 按照a字段把结果降序
* query6.skip(n); 跳过结果集的第n个 超过总条数就是啥都不输出 n<=0 时 查询到结束不跳过
* query6.skip(n).limit(m) 跳过n条并显示m条记录
* query6.addCriteria(Criteria.where("b").is("11")); 再加条件 查询子段不能是上一个query查询过的子段
* query6.maxScan(6).skip(-2); 先截取六条数据再跳过两条
* */
//通过整个mongodb中查询author = mongodb的数据,返回的一个对象
Query query = new Query(Criteria.where("author").is("mongodb"));
List<MaxValue> maxValues = mongoTemplate.find(query, MaxValue.class);
System.out.println(maxValues.size()); //Sl6512014在数据库中对应很多集合,在查询中要指定集合名
Query query1 = new Query(Criteria.where("serial").is(3));
List<Sl6512014> sl6512014s = mongoTemplate.find(query1, Sl6512014.class,"1");
System.out.println(sl6512014s.size()); // lte -- <= lt --- < gt --- > lgt---- >=
Query query2 = new Query(Criteria.where("serial").lte(1500));
List<Sl6512014> sl6512014s2 = mongoTemplate.find(query2, Sl6512014.class,"1703230781");
System.out.println(sl6512014s2.size()); //多条件的查询 and 增加条件,in 判断符合条件的数据
Query query3 = new Query(Criteria.where("serial").lte(500).and("st").is("1703230781").and("c").in("5.7"));
List<Sl6512014> sl6512014s3 = mongoTemplate.find(query3, Sl6512014.class,"1703230781");
System.out.println(sl6512014s3.size()); Query query4 = new Query(Criteria.where("st").exists(true));
List<Sl6512014> sl6512014s1 = mongoTemplate.find(query4, Sl6512014.class, "1703230781");
System.out.println(sl6512014s1.size());
//Criteria.where("serial").is(3).orOperator().is().andOperator()
Query query5 = new Query(Criteria.where("serial").is(3));
List<Sl6512014> sl6512014s5 = mongoTemplate.find(query5, Sl6512014.class, "1");
System.out.println(sl6512014s5.size());
//regex还可以用正则
Query query6 = new Query(Criteria.where("a").lte("9"));
//设置安装某一个子段进行降序
query6.with(new Sort(Sort.Direction.DESC,"a"));
query6.skip(3);
List<A> a = mongoTemplate.find(query6, A.class, "a");
for (A a1 : a) {
System.out.println(a1);
}
}
/**
* @author huhy
* @ClassName:MongodbUtilsTest
* @date 2018/8/1 13:34
* @Description: mongodb的高级用法,分组等操作
*/
@Test
public void testMongodbGroup(){
Criteria criteria = Criteria.where("a").in("1","2","3","4");
GroupOperation groupOperation = Aggregation.group("a").last("a").as("a").last("b").as("b").last("c").as("c");
Aggregation agg = Aggregation.newAggregation(A.class,Aggregation.match(criteria),groupOperation);
AggregationResults<A> a = mongoTemplate.aggregate(agg, "a", A.class);
List<A> mappedResults = a.getMappedResults();
for (A mappedResult : mappedResults) {
System.out.println(mappedResult);
}
}
/**
* @author huhy
* @ClassName:MongodbUtilsTest
* @date 2018/8/1 17:22
* @Description: 分组
*/
public List<Sl6512014> selectDataByGroupFildes(String collectionName,String... fildes){
Aggregation agg = Aggregation.newAggregation(
// 第一步:挑选所需的字段,类似select *,*所代表的字段内容
Aggregation.project("_id", "serial", "ut", "st", "tt", "pj",
"pt", "va", "vt", "z","zt","sbl1","turb","stt"),
// 第二步:sql where 语句筛选符合条件的记录
/* Aggregation.match(
Criteria.where("companyName").is(companyName).and("addedDate").gte(startTime).lte(endTime)),*/
// 第三步:分组条件,设置分组字段
Aggregation.group(fildes)
.count().as("allCount")// 增加COUNT为分组后输出的字段
.last("_id").as("id").last("serial").as("serial").last("ut").as("ut")
.last("st").as("st").last("tt").as("tt").last("pj").as("pj")
.last("pt").as("pt").last("va").as("va")
.last("vt").as("vt").last("z").as("z")
.last("zt").as("zt").last("sbl1").as("sbl1")
.last("turb").as("turb").last("stt").as("stt"),
// 第四步:重新挑选字段
Aggregation.project("id", "serial", "ut", "st", "tt", "pj",
"pt", "va", "vt", "z","zt","sbl1","turb","stt")
);
AggregationResults<Sl6512014> results = mongoTemplate.aggregate(
agg, collectionName, Sl6512014.class);
List<Sl6512014> mappedResults = results.getMappedResults();
return mappedResults;
} }

springboot 学习之路 14(整合mongodb的Api操作)的更多相关文章

  1. springboot 学习之路 8 (整合websocket(1))

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  2. springboot 学习之路 20 (整合RabbitMQ)

    整合RabbitMQ: 我的操作系统是window7 ,所以在整合ribbotMQ之前需要先安装rabbitMq服务:安装步骤请参考:window下安装RabbitMQ  这个详细介绍了安装步骤,请按 ...

  3. springboot 学习之路 6(定时任务)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  4. springboot 学习之路 1(简单入门)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  5. springboot 学习之路 3( 集成mybatis )

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  6. springboot 学习之路 4(日志输出)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  7. springboot 学习之路 9 (项目启动后就执行特定方法)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  8. springboot 学习之路 2(注解介绍)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  9. springboot 学习之路 5(打成war包部署tomcat)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

随机推荐

  1. Android_ 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法

    转载时注明地址:http://blog.csdn.net/xiaanming/article/details/9344703 我们开发Android应用的时候,当出现Crash的时候,系统弹出一个警告 ...

  2. piplinedb 安装配置

    piplinedb不能使用root用户操作,提前建好用户 [root@yzh-jkb-privatization /]# useradd steven [root@yzh-jkb-privatizat ...

  3. Java NIO系列教程(十二) Java NIO与IO

    当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代 ...

  4. 使用Gitlab一键安装包后的日常备份恢复与迁移

    Gitlab 创建备份 使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份: gitlab-rake gitlab:ba ...

  5. openerp7 时区问题解决--改成本地时区

    由于目前openerp的时区,读取的是UTC时间,而我国本地时间比UTC快8小时 问题就导致,写入数据库的时候时间相差8小时,以及Openerp日志输出时间格式也相差8小时和前端显示问题 1.更改op ...

  6. 第一次项目上Linux服务器(三:安装Tomcat及相关命令)

    一.下载Tomcat 去官网:http://tomcat.apache.org/ 找到要下载的Tomcat 本人下载的是apache-tomcat-8.5.29.tar.gz,百度云资源链接:链接:h ...

  7. (转)mybatis数据库物理分页插件PageHelper

    以前使用ibatis/mybatis,都是自己手写sql语句进行物理分页,虽然稍微有点麻烦,但是都习惯了.最近试用了下mybatis的分页插件 PageHelper,感觉还不错吧.记录下其使用方法. ...

  8. TCP长连接的一些事儿

    1.TCP的特点以及与应用        TCP提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接.TC ...

  9. winform窗体 小程序【线程】

    线程是进程中执行运算的最小单位,也是执行处理机调度的基本单位.实际上线程是轻量级的进程.那么为什么要使用线程呢? (1)易于调度. (2)提高并发性.通过线程可方便有效地实现并发性.进程可创建多个线程 ...

  10. jsp、css中引入外部资源相对路径的问题

    在jsp页面中添加base,可用相对路径: <% String path = request.getContextPath(); String basePath = request.getSch ...