Spring Boot集成mongodb数据库过程解析
一.认识mongodb
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
二.Springboot项目集成mongodb
1.添加mongodb依赖
org.springframework.boot spring-boot-starter-data-mongodb
2.配置mongodb的连接
spring:
data:
mongodb:
#uri:mongodb://localhost:27017/data_exploration
uri:mongodb://root:dhcc-mongodb@192.168.100.87:27017/data_exploration?authSource=admin&authMechanism=SCRAM-SHA-1
解析:以上uri分别代表本地配置和远程连接
3.操作数据库
(1)保存
@Repository
publicclassExplorationJobDao{
@Autowired
MongoTemplatemongoTemplate;
publicvoidsave(ExplorationJobexplorationJob){
mongoTemplate.save(explorationJob);
}
}
(2)根据ID修改一条数据(其原理先符合ID的数据,然后删除查询结果的第一条)
publicvoidupdateExecutionStatusById(intexecutionStatus,StringjobId){
Queryquery=newQuery(Criteria.where("jobId").is(jobId));
Updateupdate=newUpdate().set("executionStatus",executionStatus);
mongoTemplate.updateFirst(query,update,ExplorationJob.class);
}
(3)根据条修改多条数据(查询符合ID的所有数据,然后将所有数据修改)
publicvoidupdate(BusinessExplorationbusinessExploration){
Queryquery=newQuery(Criteria.where("_id").is(businessExploration.getId()));
Updateupdate=newUpdate().set("sourceUnit",businessExploration.getSourceUnit())
.set("appSystem",businessExploration.getAppSystem())
.set("businessImplication",businessExploration.getBusinessImplication())
.set("safetyRequire",businessExploration.getSafetyRequire());
mongoTemplate.updateMulti(query,update,TableExploration.class);
}
(4)删除(根据ID删除)
publicvoiddelExplorationJobById(StringjobId){
Queryquery=newQuery(Criteria.where("jobId").is(jobId));
mongoTemplate.remove(query,ExplorationJob.class);
}
(5)根据条件查询(根据ID查询)
publicExplorationJobgetExplorationJobByJobId(StringjobId){
Queryquery=newQuery(Criteria.where("jobId").is(jobId));
ExplorationJobexplorationJob=mongoTemplate.findOne(query,ExplorationJob.class);
returnexplorationJob;
}
(6)查询所有
mongoTemplate.findAll(TableExploration.class);
(7)多条件动态查询
publicListgetExplorationByCondition(ExplorationJobexplorationJob){ Queryquery=newQuery(); if(explorationJob.getJobName()!=null){ Patternpattern=Pattern.compile("^.*"+explorationJob.getJobName()+".*$",Pattern.CASE_INSENSITIVE); query.addCriteria(Criteria.where("jobName").regex(pattern)); } if(explorationJob.getDsType()!=null){ query.addCriteria(Criteria.where("dsType").is(explorationJob.getDsType())); } if(explorationJob.getExecutionStatus()!=null){ query.addCriteria(Criteria.where("executionStatus").lte(explorationJob.getExecutionStatus())); } List explorationJobs=mongoTemplate.find(query,ExplorationJob.class); returnexplorationJobs; }
(8)查询最大值
publicDategetMaxExplorationDate(StringtableName){
FindIterableiterable=mongoTemplate.getCollection("tableExploration")
.find(newBasicDBObject("tableName",tableName)).sort(newBasicDBObject("explorationDate",-1)).skip(0)
.limit(1);
Documentdoc=null;
if(getDocuments(iterable).size()>0){
doc=getDocuments(iterable).get(0);
Datedate=doc.getDate("explorationDate");
returndate;
}else{
returnnull;
}
}
/**
*工具方法
*
*@paramiterable
*@return
*/
publicstaticListgetDocuments(FindIterableiterable){
Listresults=newArrayList();
if(null!=iterable){
MongoCursorcursor=iterable.iterator();
Documentdoc=null;
while(cursor.hasNext()){
doc=cursor.next();
results.add(doc);
}
}
returnresults;
}
(9)分组查询(这里还是用到了排序)
publicListgetAllTableExplorationGroupByTableName(StringjobId){ Aggregationaggregation=Aggregation.newAggregation( Aggregation.match(Criteria.where("jobId").is(jobId)), Aggregation.sort(newSort(Direction.DESC,"explorationDate")), Aggregation.group("tableName") .first("_id").as("tableName") .first("databaseType").as("databaseType") .first("databaseName").as("databaseName") .first("networkSituation").as("networkSituation") .first("userName").as("userName") .first("password").as("password") .first("url").as("url") .first("dataStorage").as("dataStorage") .first("dataIncrement").as("dataIncrement") .first("explorationDate").as("explorationDate") //.push("columnExplorations").as("columnExplorations") .first("jobId").as("jobId") ); AggregationResults aggregationResults=mongoTemplate.aggregate(aggregation,"tableExploration",TableExploration.class); List tableExplorations=aggregationResults.getMappedResults(); returntableExplorations;
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。