1. <li id="o7hme"><tr id="o7hme"></tr></li>
      
      

      <rp id="o7hme"></rp>

        <dd id="o7hme"></dd>
        <dd id="o7hme"><track id="o7hme"></track></dd>
        <rp id="o7hme"></rp><em id="o7hme"><strike id="o7hme"><u id="o7hme"></u></strike></em>

        <em id="o7hme"></em>

      1. <dd id="o7hme"><noscript id="o7hme"></noscript></dd>
        <th id="o7hme"></th>

        <button id="o7hme"></button>

        商渠網

        商渠網門戶首頁 教育教學 Spring認證中國教育管理中心-Spring Data MongoDB教程二

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

        2021-11-12 16:55:40 / 來源: 互聯網 / 查看: 342/ 評論: 0

        摘要原標題:SpringDataMongoDB參考文檔二(內容來源:Spring中國教育管理中心)11.3.3.MongoDatabaseFactory接口雖然com.mongodb.client.MongoClient是MongoDB驅動程序API的入口點,但連接到特定的MongoDB數據庫實例需要其他信息,例如數據庫名稱和可選的用戶名和密碼。使用該信息,您可......

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

        11.3.3.MongoDatabaseFactory 接口

        雖然
        com.mongodb.client.MongoClient是 MongoDB 驅動程序 API 的入口點,但連接到特定的 MongoDB 數據庫實例需要其他信息,例如數據庫名稱和可選的用戶名和密碼。使用該信息,您可以獲得一個com.mongodb.client.MongoDatabase對象并訪問特定 MongoDB 數據庫實例的所有功能。Spring 提供了org.springframework.data.mongodb.core.MongoDatabaseFactory如下清單所示的接口來引導連接到數據庫:

        public interface MongoDatabaseFactory MongoDatabase getDatabase() throws DataAccessExceptionMongoDatabase getDatabase(String dbName) throws DataAccessException; }

        以下部分展示了如何使用帶有基于 Java 或基于 XML 的元數據的容器來配置MongoDatabaseFactory接口的實例。反過來,您可以使用該MongoDatabaseFactory實例來配置MongoTemplate.

        您可以在標準 Java 代碼中使用它們,而不是使用 IoC 容器來創建 MongoTemplate 的實例,如下所示:

        public class MongoApp private static final Log log = LogFactory.getLog(MongoApp.class); public static void main(String[] args) throws Exception { MongoOperations mongoOps = new MongoTemplate(new SimpleMongoClientDatabaseFactory(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教程二

        粗體代碼突出顯示了
        SimpleMongoClientDbFactory和
        入門部分中顯示的清單之間的唯一區別。


        SimpleMongoClientDbFactory在選擇com.mongodb.client.MongoClient作為選擇的入口點時 使用。

        11.3.4.MongoDatabaseFactory使用基于 Java 的元數據注冊實例

        要向MongoDatabaseFactory容器注冊實例,您編寫的代碼與前面代碼清單中突出顯示的非常相似。以下清單顯示了一個簡單的示例:

        @Configuration public class MongoConfiguration { public @Bean MongoDatabaseFactory mongoDatabaseFactory() { return new SimpleMongoClientDatabaseFactory(MongoClients.create(), "database");
          }
        }

        MongoDB 服務器第 3 代在連接到數據庫時更改了身份驗證模型。因此,一些可用于身份驗證的配置選項不再有效。您應該使用MongoClient-specific 選項來設置憑據MongoCredential以提供身份驗證數據,如以下示例所示:

        @Configuration public class ApplicationContextEventTestsAppConfig extends AbstractMongoClientConfiguration { @Override public String getDatabaseName() { return "database";
          } @Override protected void configureClientSettings(Builder builder) {
        
          	builder
          	    .credential(MongoCredential.createCredential("name", "db", "pwd".toCharArray()))
          	    .applyToClusterSettings(settings  -> {
          	    	settings.hosts(singletonList(new ServerAddress("127.0.0.1", 27017)));
          	    });
          }
        }
        Spring認證中國教育管理中心-Spring Data MongoDB教程二

        為了在基于 XML 的配置中使用身份驗證,請使用元素credential上的屬性<mongo-client>。

        在基于XML的配置中使用的用戶名和密碼憑證必須URL編碼時這些包含保留的字符,例如:,%,@,或,。以下示例顯示了編碼憑據: m0ng0@dmin:mo_res:bw6},Qsdxx@admin@database→
        m0ng0%40dmin:mo_res%3Abw6%7D%2CQsdxx%40admin@database 有關更多詳細信息,請參閱RFC 3986 的第 2.2 節。

        11.3.5.MongoDatabaseFactory使用基于 XML 的元數據注冊實例

        該mongo命名空間提供了一個方便的方法來創建一個
        SimpleMongoClientDbFactory,因為相比于使用<beans/>名稱空間,如顯示在下面的例子:

        <mongo:db-factory dbname="database">

        如果您需要在
        com.mongodb.client.MongoClient用于創建的實例上配置其他選項SimpleMongoClientDbFactory,您可以使用mongo-ref以下示例中所示的屬性來引用現有 bean 。為了顯示另一種常見的使用模式,以下清單顯示了屬性占位符的使用,它允許您參數化配置和創建MongoTemplate:

        <context:property-placeholder location="classpath:/com/myapp/mongodb/config/mongo.properties"/>
        
        <mongo:mongo-client host="${mongo.host}" port="${mongo.port}">
          <mongo:client-settings connection-pool-max-connection-life-time="${mongo.pool-max-life-time}" connection-pool-min-size="${mongo.pool-min-size}" connection-pool-max-size="${mongo.pool-max-size}" 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>
        
        <mongo:db-factory dbname="database" mongo-ref="mongoClient"/>
        
        <bean id="anotherMongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
          <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
        </bean>
        Spring認證中國教育管理中心-Spring Data MongoDB教程二

        11.4.簡介MongoTemplate

        該MongoTemplate班,地處
        org.springframework.data.mongodb.core包,是中央級的Spring的MongoDB的支持,并提供了與數據庫交互的豐富的功能集。該模板提供了創建、更新、刪除和查詢 MongoDB 文檔的便捷操作,并提供了域對象和 MongoDB 文檔之間的映射。

        配置后,MongoTemplate是線程安全的,可以在多個實例中重復使用。

        MongoDB 文檔和域類之間的映射是通過委托給MongoConverter接口的實現來完成的。Spring 提供了MappingMongoConverter,但您也可以編寫自己的轉換器。有關更多詳細信息,請參閱“自定義轉換 - 覆蓋默認映射”。

        本MongoTemplate類實現了接口MongoOperations。上的方法盡可能MongoOperations以 MongoDB 驅動程序Collection對象上可用的方法命名,以使使用驅動程序 API 的現有 MongoDB 開發人員熟悉該 API。例如,你可以找到方法,如find,findAndModify,findAndReplace,findOne,insert,remove,save,update,和updateMulti。設計目標是盡可能輕松地在基本 MongoDB 驅動程序和MongoOperations. 兩個 API 之間的主要區別是MongoOperations可以傳遞域對象而不是Document. 此外,MongoOperations有流利的API Query,Criteria以及Update操作,而不是填充一個Document 指定這些操作的參數。

        引用MongoTemplate實例操作的首選方法是通過其接口MongoOperations.

        使用的默認轉換器實現MongoTemplate是MappingMongoConverter. 雖然MappingMongoConverter可以使用附加元數據來指定對象到文檔的映射,但它也可以通過使用一些映射 ID 和集合名稱的約定來轉換不包含附加元數據的對象。這些約定以及映射注解的使用在“映射”一章中進行了解釋。

        另一個核心功能MongoTemplate是將 MongoDB Java 驅動程序拋出的異常轉換為 Spring 的可移植數據訪問異常層次結構。有關更多信息,請參閱“異常翻譯”。

        MongoTemplate提供了許多方便的方法來幫助您輕松執行常見任務。但是,如果您需要直接訪問 MongoDB 驅動程序 API,則可以使用多種Execute回調方法之一。該execute回調給你到任何一個參考
        com.mongodb.client.MongoCollection或com.mongodb.client.MongoDatabase對象。有關更多信息,請參閱“執行回調”部分。

        下一節包含一個示例,說明如何MongoTemplate在 Spring 容器的上下文中使用 。

        11.4.1.實例化MongoTemplate

        您可以使用 Java 創建和注冊 的實例MongoTemplate,如以下示例所示:

        示例 61. 注冊一個
        com.mongodb.client.MongoClient對象并啟用 Spring 的異常轉換支持

        @Configuration public class AppConfig { public @Bean MongoClient mongoClient() { return MongoClients.create("mongodb://localhost:27017");
          } public @Bean MongoTemplate mongoTemplate() { return new MongoTemplate(mongoClient(), "mydatabase");
          }
        }

        有幾個重載的構造函數MongoTemplate:

        • MongoTemplate(MongoClient mongo, String databaseName):采用MongoClient對象和默認數據庫名稱進行操作。
        • MongoTemplate(MongoDatabaseFactory mongoDbFactory):采用封裝了MongoClient對象、數據庫名稱、用戶名和密碼的 MongoDbFactory 對象。
        • MongoTemplate(MongoDatabaseFactory mongoDbFactory, MongoConverter mongoConverter): 添加一個MongoConverter用于映射。

        您還可以使用 Spring 的 XML <beans/> 模式配置 MongoTemplate,如以下示例所示:

        <mongo:mongo-client host="localhost" port="27017"/> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongoClient"/> <constructor-arg name="databaseName" value="geospatial"/> </bean>

        其他創建時可能會想設置可選屬性MongoTemplate是默認WriteResultCheckingPolicy,WriteConcern和ReadPreference屬性。

        引用MongoTemplate實例操作的首選方法是通過其接口MongoOperations.

        11.4.2.WriteResultChecking政策

        在開發中,如果com.mongodb.WriteResult從任何 MongoDB 操作返回的包含錯誤,記錄或拋出異常是很方便的。在開發過程中忘記這樣做是很常見的,然后最終得到一個看起來運行成功的應用程序,而實際上,數據庫并沒有按照您的預期進行修改。您可以將 的WriteResultChecking屬性設置為MongoTemplate以下值之一:EXCEPTION或NONE,分別用于拋出Exception或不執行任何操作。默認值是使用 的WriteResultChecking值NONE。

        11.4.3.WriteConcern

        如果尚未通過更高級別的驅動程序指定(例如
        com.mongodb.client.MongoClient),則可以設置用于寫操作的com.mongodb.WriteConcern屬性MongoTemplate。如果WriteConcern未設置該屬性,則默認為 MongoDB 驅動程序的 DB 或 Collection 設置中的設置。

        11.4.4.WriteConcernResolver

        對于更高級的情況,您希望WriteConcern在每個操作的基礎上設置不同的值(用于刪除、更新、插入和保存操作),WriteConcernResolver可以在MongoTemplate. 由于MongoTemplate用于持久化 POJO,因此WriteConcernResolver您可以創建一個策略,將特定的 POJO 類映射到一個WriteConcern值。以下清單顯示了WriteConcernResolver界面:

        public interface WriteConcernResolver { WriteConcern resolve(MongoAction action);
        }

        您可以使用MongoAction參數來確定WriteConcern值或使用模板本身的值作為默認值。MongoAction包含集合名稱被寫入時,java.lang.Class所述POJO,轉換后的Document,操作(REMOVE,UPDATE,INSERT,INSERT_LIST,或SAVE),和其他一些條上下文信息。以下示例顯示了兩組獲得不同WriteConcern設置的類:

        private class MyAppWriteConcernResolver implements WriteConcernResolver { public WriteConcern resolve(MongoAction action) { if (action.getEntityClass().getSimpleName().contains("Audit")) { return WriteConcern.NONE;
            } else if (action.getEntityClass().getSimpleName().contains("Metadata")) { return WriteConcern.JOURNAL_SAFE;
            } return action.getDefaultWriteConcern();
          }
        }

        11.5.保存、更新和刪除文檔

        MongoTemplate 允許您保存、更新和刪除域對象并將這些對象映射到存儲在 MongoDB 中的文檔。

        考慮以下類:

        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教程二

        給定Person前面示例中的類,您可以保存、更新和刪除對象,如以下示例所示:

        MongoOperations是MongoTemplate實現的接口。

        package org.spring.example; import static org.springframework.data.mongodb.core.query.Criteria.where; import static org.springframework.data.mongodb.core.query.Update.update; import static org.springframework.data.mongodb.core.query.Query.query; import java.util.List; 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.SimpleMongoClientDbFactory; import com.mongodb.client.MongoClients; public class MongoApp { private static final Log log = LogFactory.getLog(MongoApp.class); public static void main(String[] args) {
        
            MongoOperations mongoOps = new MongoTemplate(new SimpleMongoClientDbFactory(MongoClients.create(), "database"));
        
            Person p = new Person("Joe", 34); // Insert is used to initially store the object into the database. mongoOps.insert(p);
            log.info("Insert: " + p); // Find p = mongoOps.findById(p.getId(), Person.class); log.info("Found: " + p); // Update mongoOps.updateFirst(query(where("name").is("Joe")), update("age", 35), Person.class); p = mongoOps.findOne(query(where("name").is("Joe")), Person.class); log.info("Updated: " + p); // Delete mongoOps.remove(p); // Check that deletion worked List<Person> people =  mongoOps.findAll(Person.class); log.info("Number of people = : " + people.size());
        
        
            mongoOps.dropCollection(Person.class); }
        }
        Spring認證中國教育管理中心-Spring Data MongoDB教程二

        前面的示例將產生以下日志輸出(包括來自 的調試消息MongoTemplate):

        DEBUG apping.MongoPersistentEntityIndexCreator:  80 - Analyzing class class org.spring.example.Person for index information.
        DEBUG work.data.mongodb.core.MongoTemplate: 632 - insert Document containing fields: [_class, age, name] in collection: person
        INFO               org.spring.example.MongoApp: 30 - Insert: Person [id=4ddc6e784ce5b1eba3ceaf5c, name=Joe, age=34]
        DEBUG work.data.mongodb.core.MongoTemplate:1246 - findOne using query: { "_id" : { "$oid" : "4ddc6e784ce5b1eba3ceaf5c"}} in db.collection: database.person
        INFO               org.spring.example.MongoApp: 34 - Found: Person [id=4ddc6e784ce5b1eba3ceaf5c, name=Joe, age=34]
        DEBUG work.data.mongodb.core.MongoTemplate: 778 - calling update using query: { "name" : "Joe"} and update: { "$set" : { "age" : 35}} in collection: person
        DEBUG work.data.mongodb.core.MongoTemplate:1246 - findOne using query: { "name" : "Joe"} in db.collection: database.person
        INFO               org.spring.example.MongoApp: 39 - Updated: Person [id=4ddc6e784ce5b1eba3ceaf5c, name=Joe, age=35]
        DEBUG work.data.mongodb.core.MongoTemplate: 823 - remove using query: { "id" : "4ddc6e784ce5b1eba3ceaf5c"} in collection: person
        INFO               org.spring.example.MongoApp: 46 - Number of people = : 0 DEBUG work.data.mongodb.core.MongoTemplate: 376 - Dropped collection [database.person]
        Spring認證中國教育管理中心-Spring Data MongoDB教程二

        MongoConverter通過識別(通過約定)屬性名稱String,導致ObjectId存儲在數據庫中的a和 an之間進行隱式轉換Id。

        前面的示例旨在展示保存、更新和刪除操作的使用,MongoTemplate而不是展示復雜的映射功能。

        前面示例中使用的查詢語法在“查詢文檔”部分有更詳細的解釋。

        11.5.1.如何_id在映射層中處理字段

        MongoDB 要求您有一個_id包含所有文檔的字段。如果您不提供,驅動程序將分配ObjectId一個生成的值。當您使用 時MappingMongoConverter,某些規則控制 Java 類中的屬性如何映射到此_id字段:

        1. 用@Id( org.springframework.data.annotation.Id)注釋的屬性或字段映射到該_id字段。
        2. 沒有注釋但已命名的屬性或字段id映射到該_id字段。

        下面概述了_id在使用MappingMongoConverter(默認為MongoTemplate)時對映射到文檔字段的屬性進行的類型轉換(如果有)。

        1. 如果可能,在 Java 類中id聲明為 a的屬性或字段通過使用 SpringString轉換為并存儲為 an 。有效的轉換規則委托給 MongoDB Java 驅動程序。如果無法轉換為,則該值將作為字符串存儲在數據庫中。ObjectIdConverter<String, ObjectId>ObjectId
        2. 使用 Spring將在 Java 類中id聲明的屬性或字段BigInteger轉換為 并存儲為。ObjectIdConverter<BigInteger, ObjectId>

        如果 Java 類中不存在先前規則集中指定的字段或屬性_id,則驅動程序會生成一個隱式文件,但不會映射到 Java 類的屬性或字段。

        查詢和更新時,MongoTemplate使用與上述規則對應的轉換器來保存文檔,以便查詢中使用的字段名稱和類型可以匹配域類中的內容。

        某些環境需要自定義方法來映射Id值,例如存儲在 MongoDB 中的未通過 Spring Data 映射層運行的數據。文檔可以包含_id可以表示為ObjectId或 的值String。從存儲讀取文檔回域類型工作正常。id由于隱式ObjectId轉換,通過它們查詢文檔可能很麻煩。因此無法以這種方式檢索文檔。對于這些情況,@MongoId提供對實際 id 映射嘗試的更多控制。

        例 62.@MongoId映射

        public class PlainStringId { @MongoId String id; 
        } public class PlainObjectId { @MongoId ObjectId id; 
        } public class StringToObjectId { @MongoId(FieldType.OBJECT_ID) String id; 
        }
        Spring認證中國教育管理中心-Spring Data MongoDB教程二

        11.5.2.類型映射

        MongoDB 集合可以包含表示各種類型實例的文檔。如果您存儲類的層次結構或具有具有 type 屬性的類,則此功能非常有用Object。在后一種情況下,該屬性中保存的值必須是在檢索對象時正確讀入。因此,我們需要一種機制來將類型信息與實際文檔一起存儲。

        為了實現這一點,它MappingMongoConverter使用了一個MongoTypeMapper抽象DefaultMongoTypeMapper作為其主要實現。它的默認行為是_class在文檔內部存儲完全限定的類名。為頂級文檔以及每個值(如果它是復雜類型)編寫類型提示和聲明的屬性類型的子類型。以下示例(末尾帶有 JSON 表示)顯示了映射的工作原理:

        示例 63. 類型映射

        public class Sample {
          Contact value;
        } public abstract class Contact { … } public class Person extends Contact { … }
        
        Sample sample = new Sample();
        sample.value = new Person();
        
        mongoTemplate.save(sample);
        
        { "value" : { "_class" : "com.acme.Person" }, "_class" : "com.acme.Sample" }
        Spring認證中國教育管理中心-Spring Data MongoDB教程二

        Spring Data MongoDB 將類型信息存儲為實際根類以及嵌套類型的最后一個字段(因為它是復雜的并且是 的子類型Contact)。因此,如果您現在使用mongoTemplate.findAll(Object.class, "sample"),您可以發現存儲的文檔是一個Sample實例。你還可以發現 value 屬性實際上是一個Person.

        內容來源:Spring中國教育管理中心(Spring認證)

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

        2021年2月,VMware公司正式與北京中科卓望網絡科技有限公司(以下簡稱:中科卓望)達成戰略合作,授予其 Spring 中國教育管理中心,攜手 VMware 全球最新 Spring技術和認證體系,幫助中國院校構建專業教學內容,全面賦能未來開發人。


        鮮花

        握手

        雷人

        路過

        雞蛋
        1. <li id="o7hme"><tr id="o7hme"></tr></li>
          
          

          <rp id="o7hme"></rp>

            <dd id="o7hme"></dd>
            <dd id="o7hme"><track id="o7hme"></track></dd>
            <rp id="o7hme"></rp><em id="o7hme"><strike id="o7hme"><u id="o7hme"></u></strike></em>

            <em id="o7hme"></em>

          1. <dd id="o7hme"><noscript id="o7hme"></noscript></dd>
            <th id="o7hme"></th>

            <button id="o7hme"></button>

            多毛老太婆牲交_xxxxxhd69日本_廖承宇chinese野战做受_亚洲精品欧美精品日韩精品