Spring Boot整合mongodb資料庫過程解析
阿新 • • 發佈:2020-05-18
一.認識mongodb
MongoDB是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。它支援的資料結構非常鬆散,是類似json的bson格式,因此可以儲存比較複雜的資料型別。Mongo最大的特點是它支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。
二.Spring boot專案整合mongodb
1.新增mongodb依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
2.配置mongodb的連線
spring:
data:
mongodb:
#uri: mongodb://localhost:27017/data_exploration
uri: mongodb://root:[email protected]:27017/data_exploration?authSource=admin&authMechanism=SCRAM-SHA-1
解析:以上uri分別代表本地配置和遠端連線
3.操作資料庫
(1)儲存
@Repository public class ExplorationJobDao { @Autowired MongoTemplate mongoTemplate; public void save(ExplorationJob explorationJob) { mongoTemplate.save(explorationJob); } }
(2)根據ID修改一條資料(其原理先符合ID的資料,然後刪除查詢結果的第一條)
public void updateExecutionStatusById(int executionStatus,String jobId) { Query query = new Query(Criteria.where("jobId").is(jobId)); Update update = new Update().set("executionStatus",executionStatus); mongoTemplate.updateFirst(query,update,ExplorationJob.class); }
(3)根據條修改多條資料(查詢符合ID的所有資料,然後將所有資料修改)
public void update(BusinessExploration businessExploration) { Query query = new Query(Criteria.where("_id").is(businessExploration.getId())); Update update = new Update().set("sourceUnit",businessExploration.getSourceUnit()) .set("appSystem",businessExploration.getAppSystem()) .set("businessImplication",businessExploration.getBusinessImplication()) .set("safetyRequire",businessExploration.getSafetyRequire()); mongoTemplate.updateMulti(query,TableExploration.class); }
(4)刪除(根據ID刪除)
public void delExplorationJobById(String jobId) { Query query=new Query(Criteria.where("jobId").is(jobId)); mongoTemplate.remove(query,ExplorationJob.class); }
(5)根據條件查詢(根據ID查詢)
public ExplorationJob getExplorationJobByJobId(String jobId) { Query query = new Query(Criteria.where("jobId").is(jobId)); ExplorationJob explorationJob = mongoTemplate.findOne(query,ExplorationJob.class); return explorationJob; }
(6)查詢所有
mongoTemplate.findAll(TableExploration.class);
(7)多條件動態查詢
public List<ExplorationJob> getExplorationByCondition(ExplorationJob explorationJob) { Query query = new Query(); if (explorationJob.getJobName() != null) { Pattern pattern = 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<ExplorationJob> explorationJobs=mongoTemplate.find(query,ExplorationJob.class); return explorationJobs; }
(8)查詢最大值
public Date getMaxExplorationDate(String tableName) { FindIterable<Document> iterable = mongoTemplate.getCollection("tableExploration") .find(new BasicDBObject("tableName",tableName)).sort(new BasicDBObject("explorationDate",-1)).skip(0) .limit(1); Document doc =null; if (getDocuments(iterable).size()>0) { doc=getDocuments(iterable).get(0); Date date = doc.getDate("explorationDate"); return date; }else { return null; } } /** * 工具方法 * * @param iterable * @return */ public static List<Document> getDocuments(FindIterable<Document> iterable) { List<Document> results = new ArrayList<Document>(); if (null != iterable) { MongoCursor<Document> cursor = iterable.iterator(); Document doc = null; while (cursor.hasNext()) { doc = cursor.next(); results.add(doc); } } return results; }
(9)分組查詢(這裡還是用到了排序)
public List<TableExploration> getAllTableExplorationGroupByTableName(String jobId){ Aggregation aggregation = Aggregation.newAggregation( Aggregation.match(Criteria.where("jobId").is(jobId)),Aggregation.sort(new Sort(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<TableExploration> aggregationResults= mongoTemplate.aggregate(aggregation,"tableExploration",TableExploration.class); List<TableExploration> tableExplorations=aggregationResults.getMappedResults(); return tableExplorations;
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。