Spring認證中國教育管理中心-Spring Data MongoDB教程

Adobe國際認證發表於2021-11-11

原標題:Spring Data MongoDB參考文件(內容來源:Spring中國教育管理中心)

參考文件的這一部分解釋了 Spring Data MongoDB 提供的核心功能。

“ MongoDB 支援”介紹了 MongoDB 模組功能集。

“ MongoDB Repositories ”介紹了對 MongoDB 的儲存庫支援。

11. MongoDB 支援

MongoDB 支援包含廣泛的功能:

  • Spring 配置支援使用基於 Java 的@Configuration類或用於 Mongo 驅動程式例項和副本集的 XML 名稱空間。
  • MongoTemplate 在執行常見的 Mongo 操作時提高生產力的助手類。包括文件和 POJO 之間的整合物件對映。
  • 異常轉換為 Spring 的可移植資料訪問異常層次結構。
  • 功能豐富的物件對映與 Spring 的轉換服務整合。
  • 基於註釋的對映後設資料可擴充套件以支援其他後設資料格式。
  • 永續性和對映生命週期事件。
  • 基於 Java 的查詢、標準和更新 DSL。
  • 儲存庫介面的自動實現,包括對自定義查詢器方法的支援。
  • QueryDSL 整合以支援型別安全查詢。
  • 對 JPA 實體的跨儲存永續性支援,其欄位透明地持久化並使用 MongoDB 檢索(不推薦使用 - 將被刪除而不替換)。
  • 地理空間整合。

對於大多數任務,您應該使用MongoTemplate或 Repository 支援,它們都利用了豐富的對映功能。MongoTemplate是尋找訪問功能的地方,例如遞增計數器或臨時 CRUD 操作。MongoTemplate還提供了回撥方法,以便您可以輕鬆獲取低階 API 工件,例如
com.mongodb.client.MongoDatabase直接與 MongoDB 通訊。各種 API 工件的命名約定的目標是複製基礎 MongoDB Java 驅動程式中的命名約定,以便您可以輕鬆地將現有知識對映到 Spring API。

11.1.入門

引導設定工作環境的一種簡單方法是在STS 中建立一個基於 Spring 的專案。

首先,您需要設定一個正在執行的 MongoDB 伺服器。有關如何啟動 MongoDB 例項的說明,請參閱MongoDB 快速入門指南。安裝後,啟動 MongoDB 通常只需執行以下命令:${MONGO_HOME}/bin/mongod

在 STS 中建立 Spring 專案:

  1. 轉到 File → New → Spring Template Project → Simple Spring Utility Project,然後在出現提示時按 Yes。然後輸入專案和包名稱,例如org.spring.mongodb.example.
  2. 將以下內容新增到 pom.xml 檔案dependencies元素:

<dependencies>   <!-- other dependency elements omitted -->   <dependency>   <groupId> org.springframework.data </groupId>   <artifactId> spring-data-mongodb </artifactId>   <version> 3.2.6 </version>   </dependency>   </dependencies>

Spring認證中國教育管理中心-Spring Data MongoDB教程

3. 將 pom.xml 中 Spring 的版本改為 <spring.framework.version> 5.3.11 </spring.framework.version>

4.將 Maven 的 Spring Milestone 儲存庫的以下位置新增到您pom.xml的<dependencies/>元素中,使其與您的元素處於同一級別:

<repositories>   <repository>   <id> spring-milestone </id>   <name> Spring Maven MILESTONE Repository </name>   <url> </url>   </repository>   </repositories>

儲存庫也可在此處瀏覽。

您可能還希望將日誌記錄級別設定為DEBUG以檢視一些附加資訊。為此,請編輯log4j.properties檔案以具有以下內容:

log4j.category.org.springframework.data.mongodb=DEBUG log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n

然後你可以建立一個Person類來持久化:

package  org.spring.mongodb.example;  public   class  Person  private  String id;  private  String name;  private   int  age;  public  Person(String name,  int age)  this .name = name;  this .age = age; }  public String  getId()  return  id; }  public String  getName()  return  name; }  public  int  getAge()  return  age; }  @Override   public String  toString()  return   "Person [id="  + id +  ", name="  + name +  ", age="  + age +  "]" ; } }

Spring認證中國教育管理中心-Spring Data MongoDB教程

您還需要一個主應用程式來執行:

package  org.spring.mongodb.example;  import   static  org.springframework.data.mongodb.core.query.Criteria.where;  import  org.apache.commons.logging.Log;  import  org.apache.commons.logging.LogFactory;  import  org.springframework.data.mongodb.core.MongoOperations;  import  org.springframework.data.mongodb.core.MongoTemplate;  import  org.springframework.data.mongodb.core.query.Query;  import  com.mongodb.client.MongoClients;  public   class  MongoApp  private   static   final  Log log = LogFactory.getLog(MongoApp.class);  public  static  void  main(String[] args)  throws Exception  { MongoOperations mongoOps =  new  MongoTemplate(MongoClients.create(),  "database" ); mongoOps.insert( new  Person( "Joe" 34 )); log.info(mongoOps.findOne( new  Query(where( "name" ).is( "Joe" )), Person.class)); mongoOps.dropCollection( "person" ); } }

Spring認證中國教育管理中心-Spring Data MongoDB教程

執行主程式時,前面的示例會產生以下輸出:

10:01:32,062 DEBUG apping.MongoPersistentEntityIndexCreator: 80 - Analyzing class class org.spring.example.Person for index information. 10:01:32,265 DEBUG ramework.data.mongodb.core.MongoTemplate: 631 - insert Document containing fields: [_class, age, name] in collection: Person 10:01:32,765 DEBUG ramework.data.mongodb.core.MongoTemplate:1243 - findOne using query: { "name" : "Joe"} in db.collection: database.Person 10:01:32,953 INFO org.spring.mongodb.example.MongoApp: 25 - Person [id=4ddbba3c0be56b7e1b210166, name=Joe, age=34] 10:01:32,984 DEBUG ramework.data.mongodb.core.MongoTemplate: 375 - Dropped collection [database.person]

即使在這個簡單的例子中,也有幾件事需要注意:

  • 您可以 MongoTemplate透過使用標準com.mongodb.client.MongoClient物件和要使用的資料庫名稱來例項化 Spring Mongo 的中央幫助器類。
  • 對映器針對標準 POJO 物件工作,無需任何額外的後設資料(儘管您可以選擇提供該資訊。請參閱此處。)。
  • 約定用於處理id欄位,將其轉換為ObjectId儲存在資料庫中的時間。
  • 對映約定可以使用欄位訪問。請注意,Person該類只有 getter。
  • 如果建構函式引數名稱與儲存文件的欄位名稱匹配,則它們用於例項化物件

11.2.示例庫

有一個包含多個示例的GitHub 儲存庫,您可以下載並試用這些示例,以瞭解該庫的工作原理。

11.3.使用 Spring 連線到 MongoDB

使用 MongoDB 和 Spring 時的首要任務之一是
com.mongodb.client.MongoClient使用 IoC 容器建立物件。有兩種主要方法可以做到這一點,一種是使用基於 Java 的 bean 後設資料,另一種是使用基於 XML 的 bean 後設資料。以下各節將討論兩者。

對於那些不熟悉如何配置使用基於Java bean的後設資料,而不是基於XML的後設資料Spring容器,請參閱參考文件的高階介紹這裡還有詳細的文件在這裡。

11.3.1.使用基於 Java 的後設資料註冊 Mongo 例項

以下示例顯示了使用基於 Java 的 bean 後設資料註冊 a 例項的示例
com.mongodb.client.MongoClient:

示例
56.com.mongodb.client.MongoClient使用基於 Java 的 bean 後設資料註冊物件

@Configuration   public   class  AppConfig  /* * Use the standard Mongo driver API to create a com.mongodb.client.MongoClient instance. */   public   @Bean  MongoClient  mongoClient()  return  MongoClients.create( "mongodb://localhost:27017" ); } }

Spring認證中國教育管理中心-Spring Data MongoDB教程

這種方法允許您使用標準
com.mongodb.client.MongoClient例項,容器使用 Spring 的MongoClientFactoryBean. 與com.mongodb.client.MongoClient直接例項化例項FactoryBean相比,它還為容器提供了一個ExceptionTranslator實現,該實現將 MongoDB 異常轉換為 Spring 的可移植DataAccessException層次結構中的異常,用於使用註釋註釋的資料訪問類@Repository。Spring 的 DAO 支援特性中@Repository描述了這種層次結構和使用。

以下示例顯示了一個基於 Java 的 bean 後設資料的示例,該後設資料支援對帶@Repository註釋的類進行異常轉換:

示例
57.com.mongodb.client.MongoClient使用 Spring註冊物件MongoClientFactoryBean並啟用 Spring 的異常轉換支援

@Configuration   public   class  AppConfig  /* * Factory bean that creates the com.mongodb.client.MongoClient instance */   public   @Bean  MongoClientFactoryBean  mongo()  { MongoClientFactoryBean mongo =  new  MongoClientFactoryBean(); mongo.setHost( "localhost" );  return  mongo; } }

Spring認證中國教育管理中心-Spring Data MongoDB教程

要訪問
com.mongodb.client.MongoClient由MongoClientFactoryBean其他@Configuration類或您自己的類建立的物件,請使用private @Autowired MongoClient mongoClient;欄位。

11.3.2.使用基於 XML 的後設資料註冊 Mongo 例項

雖然您可以使用 Spring 的傳統<beans/>XML 名稱空間向
com.mongodb.client.MongoClient容器註冊 的例項,但 XML 可能非常冗長,因為它是通用的。XML 名稱空間是配置常用物件(例如 Mongo 例項)的更好替代方法。mongo 名稱空間允許您建立 Mongo 例項伺服器位置、副本集和選項。

要使用 Mongo 名稱空間元素,您需要引用 Mongo 架構,如下所示:

示例 58.配置 MongoDB 的 XML 模式

<?xml version="1.0" encoding="UTF-8"?>   <beans  xmlns= "  xmlns:xsi= "  xmlns:mongo= "  xsi:schemaLocation" >   <!-- Default bean name is 'mongo' -->   <mongo:mongo-client  host= "localhost"  port= "27017"/>   </beans>

Spring認證中國教育管理中心-Spring Data MongoDB教程

以下示例顯示了更高階的配置MongoClientSettings(請注意,這些不是推薦值):

示例 59.使用 XML 模式配置
com.mongodb.client.MongoClient物件MongoClientSettings

<beans>   <mongo:mongo-client  host= "localhost"  port= "27017">   <mongo:client-settings  connection-pool-max-connection-life-time= "10"  connection-pool-min-size= "10"  connection-pool-max-size= "20"  connection-pool-maintenance-frequency= "10"  connection-pool-maintenance-initial-delay= "11"  connection-pool-max-connection-idle-time= "30"  connection-pool-max-wait-time= "15" />   </mongo:mongo-client>   </beans>

Spring認證中國教育管理中心-Spring Data MongoDB教程

以下示例顯示了使用副本集的配置:

示例
60.com.mongodb.client.MongoClient使用副本集配置物件的XML 模式

<mongo:mongo-client  id= "replicaSetMongo"  replica-set= "rs0">   <mongo:client-settings  cluster-hosts= "127.0.0.1:27017,localhost:27018" />   </mongo:mongo-client>


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69981720/viewspace-2841775/,如需轉載,請註明出處,否則將追究法律責任。

相關文章