Úvod do jarných dát MongoDB

1. Prehľad

Tento článok bude rýchly a praktický úvod do Spring Data MongoDB.

Prejdeme si základné veci pomocou oboch MongoTemplate ako aj Úložisko Mongo pomocou praktických príkladov na ilustráciu každej operácie.

2. MongoTemplatea MongoRepository

The MongoTemplatesleduje štandardný vzor šablóny na jar a poskytuje základné rozhranie API pripravené na použitie pre základný modul perzistencie.

Úložisko sleduje prístup zameraný na jarné údaje a prichádza s flexibilnejšími a zložitejšími operáciami API na základe známych prístupových vzorov vo všetkých projektoch jarných údajov.

Pre obidve musíme začať definovaním závislosti - napríklad v pom.xml, s Mavenom:

 org.springframework.data spring-data-mongodb 3.0.3.RELEASE 

Ak chcete skontrolovať, či bola vydaná nejaká nová verzia knižnice, sledujte vydania tu.

3. Konfigurácia pre MongoTemplate

3.1. Konfigurácia XML

Začnime s jednoduchou konfiguráciou XML pre šablónu Mongo:

Najprv musíme definovať továrenské zrno zodpovedné za vytváranie inštancií Mongo.

Ďalej - musíme skutočne definovať (a nakonfigurovať) fazuľu šablóny:

A nakoniec musíme definovať postprocesor na preloženie ľubovoľného MongoVýnimky hodený dovnútra @Úložisko anotované triedy:

3.2. Konfigurácia Java

Poďme si teraz vytvoriť podobnú konfiguráciu pomocou konfigurácie Java rozšírením základnej triedy pre konfiguráciu MongoDB AbstractMongoConfiguration:

@Configuration verejná trieda MongoConfig rozširuje AbstractMongoClientConfiguration {@Override chránený reťazec getDatabaseName () {return "test"; } @Override public MongoClient mongoClient () {ConnectionString connectionString = nový ConnectionString ("mongodb: // localhost: 27017 / test"); MongoClientSettings mongoClientSettings = MongoClientSettings.builder () .applyConnectionString (connectionString) .build (); návrat MongoClients.create (mongoClientSettings); } @Override public Collection getMappingBasePackages () {return Collections.singleton ("com.baeldung"); }}

Poznámka: Nemuseli sme definovať MongoTemplate fazuľa v predchádzajúcej konfigurácii, ako je už definovaná v AbstractMongoClientConfiguration.

Môžeme tiež použiť našu konfiguráciu od nuly bez predĺženia AbstractMongoClientConfiguration - nasledovne:

@ Konfigurácia verejnej triedy SimpleMongoConfig {@Bean public MongoClient mongo () {ConnectionString connectionString = nový ConnectionString ("mongodb: // localhost: 27017 / test"); MongoClientSettings mongoClientSettings = MongoClientSettings.builder () .applyConnectionString (connectionString) .build (); návrat MongoClients.create (mongoClientSettings); } @Bean public MongoTemplate mongoTemplate () vyvolá výnimku {vrátiť nový MongoTemplate (mongo (), "test"); }}

4. Konfigurácia pre Úložisko Mongo

4.1. Konfigurácia XML

Využiť vlastné úložiská (rozširujúce Úložisko Mongo) - musíme pokračovať v konfigurácii z časti 3.1 a nastaviť úložiská:

4.2. Konfigurácia Java

Podobne nadviažeme na konfiguráciu, ktorú sme už vytvorili v sekcii 3.2, a do mixu pridáme novú anotáciu:

@EnableMongoRepositories (basePackages = "com.baeldung.repository") 

4.3. Vytvorte úložisko

Teraz, po konfigurácii, musíme vytvoriť úložisko - rozšírenie existujúceho Úložisko Mongo rozhranie:

verejné rozhranie UserRepository rozširuje MongoRepository {//}

Teraz to môžeme prepojiť automaticky UserRepository a používať operácie z Úložisko Mongo alebo pridať vlastné operácie.

5. Používanie MongoTemplate

5.1. Vložte

Začnime operáciou vloženia; začnime tiež prázdnou databázou:

{ }

Teraz, keď vložíme nového používateľa:

User user = new User (); user.setName ("Jon"); mongoTemplate.insert (užívateľ, "užívateľ");

Databáza bude vyzerať takto:

{"_id": ObjectId ("55b4fda5830b550a8c2ca25a"), "_class": "com.baeldung.model.User", "name": "Jon"}

5.2. Uložiť - Vložiť

The uložiť operácia má sémantiku uloženia alebo aktualizácie: ak je ID prítomné, vykoná aktualizáciu, ak nie - vykoná vloženie.

Pozrime sa na prvú sémantiku - vložku; tu je počiatočný stav databázy:

{ }

Keď sme teraz uložiť nový užívateľ:

User user = new User (); user.setName ("Albert"); mongoTemplate.save (užívateľ, "užívateľ");

Entita bude vložená do databázy:

{"_id": ObjectId ("55b52bb7830b8c9b544b6ad5"), "_class": "com.baeldung.model.User", "name": "Albert"}

Ďalej sa pozrieme na rovnakú operáciu - uložiť - s aktualizáciou sémantiky.

5.3. Uložiť - aktualizovať

Poďme sa teraz pozrieť na uložiť s aktualizačnou sémantikou fungujúcou na existujúcej entite:

{"_id": ObjectId ("55b52bb7830b8c9b544b6ad5"), "_class": "com.baeldung.model.User", "name": "Jack"}

Teraz, keď sme uložiť existujúci užívateľ - aktualizujeme ho:

user = mongoTemplate.findOne (Query.query (Criteria.where ("name"). is ("Jack")), User.class); user.setName ("Jim"); mongoTemplate.save (užívateľ, "užívateľ");

Databáza bude vyzerať takto:

{"_id": ObjectId ("55b52bb7830b8c9b544b6ad5"), "_class": "com.baeldung.model.User", "name": "Jim"}

Ako vidíte, v tomto konkrétnom príklade uložiť používa sémantiku aktualizovať, pretože používame objekt s daným _id.

5.4. UpdateFirst

updateFirst aktualizuje úplne prvý dokument, ktorý sa zhoduje s dotazom.

Začnime s počiatočným stavom databázy:

[{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Alex"}, {"_id": ObjectId ("55b5ffa5511fee0e45ed614c"), "_class" ":" com.baeldung.model.User "," name ":" Alex "}]

Keď teraz spustíme updateFirst:

Dotaz na dopyt = nový dotaz (); query.addCriteria (Criteria.where ("meno"). je ("Alex")); Aktualizácia aktualizácia = nová aktualizácia (); update.set ("meno", "James"); mongoTemplate.updateFirst (dopyt, aktualizácia, User.class);

Aktualizuje sa iba prvý záznam:

[{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "James"}, {"_id": ObjectId ("55b5ffa5511fee0e45ed614c"), "_class" ":" com.baeldung.model.User "," name ":" Alex "}]

5.5. UpdateMulti

UpdateMultiaktualizuje všetok dokument, ktorý sa zhoduje s daným dotazom.

Najprv - tu je stav databázy pred vykonaním updateMulti:

[{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Eugen"}, {"_id": ObjectId ("55b5ffa5511fee0e45ed614c"), "_class" ":" com.baeldung.model.User "," name ":" Eugen "}] 

Teraz, poďme teraz spustiť updateMulti prevádzka:

Dotaz na dopyt = nový dotaz (); query.addCriteria (Criteria.where ("meno"). je ("Eugen")); Aktualizácia aktualizácia = nová aktualizácia (); update.set ("meno", "Victor"); mongoTemplate.updateMulti (dopyt, aktualizácia, User.class);

Oba existujúce objekty sa aktualizujú v databáze:

[{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Victor"}, {"_id": ObjectId ("55b5ffa5511fee0e45ed614c"), "_class" ":" com.baeldung.model.User "," name ":" Victor "}]

5.6. FindAndModify

Táto operácia funguje ako updateMulti, ale to vráti objekt pred úpravou.

Prvý - stav databázy pred volaním findAndModify:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Markus"} 

Pozrime sa na skutočný prevádzkový kód:

Dotaz na dopyt = nový dotaz (); query.addCriteria (Criteria.where ("meno"). je ("Markus")); Aktualizácia aktualizácia = nová aktualizácia (); update.set ("meno", "Nick"); Používateľ user = mongoTemplate.findAndModify (dopyt, aktualizácia, User.class);

Vrátený užívateľský objekt má rovnaké hodnoty ako počiatočný stav v databáze.

Nový stav v databáze je však:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Nick"}

5.7. Upsert

The upsert práce fungujú na nájsť a upraviť inak vytvoriť sémantiku: ak sa dokument zhoduje, aktualizujte ho, inak vytvorte nový dokument kombináciou dotazu a objektu aktualizácie.

Začnime s počiatočným stavom databázy:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Markus"}

Teraz - spustime upsert:

Dotaz na dopyt = nový dotaz (); query.addCriteria (Criteria.where ("meno"). je ("Markus")); Aktualizácia aktualizácia = nová aktualizácia (); update.set ("meno", "Nick"); mongoTemplate.upsert (dopyt, aktualizácia, User.class);

Tu je stav databázy po operácii:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Nick"}

5.8. Odstrániť

Stav databázy pred volaním odstrániť:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Benn"}

Poďme teraz bežať odstrániť:

mongoTemplate.remove (užívateľ, "užívateľ");

Výsledok bude podľa očakávania:

{ }

6. Používanie Úložisko Mongo

6.1. Vložte

Najprv - stav databázy pred spustením vložiť:

{ }

Teraz, keď vložíme nového používateľa:

User user = new User (); user.setName ("Jon"); userRepository.insert (užívateľ); 

Tu je konečný stav databázy:

{"_id": ObjectId ("55b4fda5830b550a8c2ca25a"), "_class": "com.baeldung.model.User", "name": "Jon"}

Všimnite si, ako operácia funguje rovnako ako v operácii vložiť v MongoTemplate API.

6.2. Uložiť Vložte

Podobne - uložiť funguje rovnako ako uložiť prevádzka v MongoTemplate API.

Začnime pohľadom na sémantika vloženia operácie; tu je počiatočný stav databázy:

{ }

Teraz - vykonáme uložiť prevádzka:

User user = new User (); user.setName ("Aaron"); userRepository.save (užívateľ);

Výsledkom je pridanie používateľa do databázy:

{"_id": ObjectId ("55b52bb7830b8c9b544b6ad5"), "_class": "com.baeldung.model.User", "name": "Aaron"}

Znova si všimnite, ako v tomto príklade uložiť pracuje s vložiť sémantiku, pretože vkladáme nový objekt.

6.3. Uložiť Aktualizácia

Pozrime sa teraz na rovnakú operáciu, ale s aktualizovať sémantiku.

Najprv - tu je stav databázy pred spustením novej uložiť:

{"_id": ObjectId ("55b52bb7830b8c9b544b6ad5"), "_class": "com.baeldung.model.User", "name": "Jack" 81 * 6}

Teraz - vykonáme operáciu:

user = mongoTemplate.findOne (Query.query (Criteria.where ("name"). is ("Jack")), User.class); user.setName ("Jim"); userRepository.save (užívateľ);

Nakoniec je tu stav databázy:

{"_id": ObjectId ("55b52bb7830b8c9b544b6ad5"), "_class": "com.baeldung.model.User", "name": "Jim"}

Znova si všimnite, ako v tomto príklade uložiť pracuje s aktualizovať sémantika, pretože používame existujúci objekt.

6.4. Odstrániť

Stav databázy pred volaním vymazať:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Benn"}

Utekajme vymazať:

userRepository.delete (užívateľ); 

Výsledkom bude jednoducho:

{ }

6.5. FindOne

Stav databázy, keď findOne sa volá:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Chris"}

Poďme teraz vykonať findOne:

userRepository.findOne (user.getId ()) 

Výsledok, ktorý vráti existujúce údaje:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Chris"}

6.6. Existuje

Stav databázy pred volaním existuje:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Harris"}

Teraz bežme existuje:

boolean isExists = userRepository.exists (user.getId ());

Čo sa samozrejme vráti pravda.

6.7. FindAll W i Triediť

Stav databázy pred volaním findAll:

[{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Brendan"}, {"_id": ObjectId ("67b5ffa5511fee0e45ed614b"), "_class" ":" com.baeldung.model.User "," name ":" Adam "}]

Poďme teraz bežať findAll s Triediť:

Zoznam používateľov = userRepository.findAll (Sort.by (Sort.Direction.ASC, "meno"));

Výsledok bude zoradené podľa názvu vzostupne:

[{"_id": ObjectId ("67b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Adam"}, {"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class" ":" com.baeldung.model.User "," name ":" Brendan "}]

6.8. FindAll W i Stránkovateľné

Stav databázy pred volaním findAll:

[{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Brendan"}, {"_id": ObjectId ("67b5ffa5511fee0e45ed614b"), "_class" ":" com.baeldung.model.User "," name ":" Adam "}]

Poďme teraz popraviť findAll s požiadavkou na stránkovanie:

Pageable pageableRequest = PageRequest.of (0, 1); Stránka page = userRepository.findAll (pageableRequest); Zoznam používateľov = pages.getContent ();

Výsledný používateľov zoznam bude iba jedným používateľom:

{"_id": ObjectId ("55b5ffa5511fee0e45ed614b"), "_class": "com.baeldung.model.User", "name": "Brendan"}

7. Anotácie

Na záver si poďme prejsť aj jednoduché anotácie, ktoré Spring Data používa na riadenie týchto operácií API.

@ ID súkromné ​​ID reťazca;

Terénna úroveň @Id anotácia môže zdobiť akýkoľvek typ vrátane dlho a povrázok.

Ak je hodnota @Id pole nemá hodnotu null, je uložené v databáze tak, ako je; inak bude prevodník predpokladať, že chcete uložiť ObjectId v databáze (buď ObjectId, reťazec alebo BigInteger práca).

Ďalšie - @Dokument:

@Document verejná trieda - používateľ {//}

Táto anotácia jednoducho označí triedu ako doménový objekt ktoré je potrebné vytrvať v databáze spolu s tým, aby sme si mohli zvoliť názov kolekcie, ktorá sa má použiť.

8. Záver

Tento článok bol rýchlym, ale komplexným úvodom do používania MongoDB s Spring Data, a to prostredníctvom MongoTemplate API, ako aj s využitím Úložisko Mongo.

Implementácia všetkých týchto príkladov a útržkov kódu môže byť najdený cez Github.


$config[zx-auto] not found$config[zx-overlay] not found