1. 程式人生 > 程式設計 >Spring Boot整合mongodb資料庫過程解析

Spring Boot整合mongodb資料庫過程解析

一.認識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;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。