Hvis du har været nogen form for relationelt databasestyringssystem i nogen tid nu, er du sikkert stødt på navnet MongoDB. Først introduceret i år 2009, er mongoDb i dag et af de mest populære relationelle databasestyringssystemer i branchen. Hovedårsagen bag dens vanvittige popularitet på trods af tilstedeværelsen af ældre relationsdatabasesoftwaremanagere som MySql, der er til stede på markedet, er det brede tal og den store alsidighed, det bringer til bordet. Brugen af MongoDB eliminerer mange behov, et blandt dem er behovet for at oprette en database og definere datatypen hver gang et nyt projekt startes. Dagsorden for MongoDB-klientartiklen:
- Forudsætninger for MongoDB Client
- Oprettelse af projektet på Maven
- Tilføjelse af din allerførste JSON-hviletjeneste
- Konfiguration af MongoDB-databasen
- Kørsel af den konfigurerede MongoDB-database
- Gør frontend
- Forenkling af MongoDB-klienten ved hjælp af BSON-codec
- Endelig kode
Men for at opnå den maksimale funktionalitet ud af MongoDB, skal man være bekendt med MongoDB-klienten, og i denne artikel vil vi diskutere netop det.
Forudsætninger for MongoDB-klient
For at denne artikel kan være fuldt ud, skal du først opfylde følgende forudsætninger.
Har en IDE allerede til stede i dit system.
Java Development Kit eller JDK version 1.8 og nyere installeret med JAVA_HOME konfigureret korrekt.
Docker eller MongoDB installeret.
Apache Maven version 3.5.3 og nyere.
Arkitekturen, som vi har skabt og brugt i denne guide, er en af de enkleste. Når den er udført, kan brugeren nemt tilføje data og elementer i en liste, hvorefter den automatisk bliver opdateret i databasen.
Sammen med dette har vi sørget for, at al kommunikation mellem data og server er i JSON, og alle data er gemt i MongoDB.
Kom godt i gang
For at komme i gang med dette projekt skal du følge trinene nedenfor.
Trin #1:Oprettelse af projektet på Maven
Det første trin er altid at oprette et nyt projekt, og for at gøre dette skal du bruge følgende kode.
mvn io.quarkus:quarkus-maven-plugin:0.22.0:create -DprojectGroupId=org.acme -DprojectArtifactId=using-mongodb-client -DclassName="org.acme.rest.json.FruitResource" -Dpath="/fruits" -Dextensions="resteasy-jsonb,mongodb-client"
Når du kører ovenstående kommando, vil IDE importere JSON-B, MongoDb samt RESTEasy/JAX-RS klienterne til dit system.
Fortsæt med trin 2.
Trin #2:Tilføjelse af din allerførste JSON hviletjeneste
For at gøre dette skal du bruge koden nedenfor.package org.acme.rest.json;import java.util.Objects;public class Fruit {private String name;private String description;public Fruit() {}public Fruit (String name, String description) {this.name =name;this.description =description;}offentlig streng getName() {return name;}public void setName(String name) {this.name =name;}offentlig streng getDescription( ) {return description;}public void setDescription(String description) {this.description =description;}@Overridepublic boolean equals(Object obj) {if (!(obj instanceof Fruit)) {return false;}Fruit other =(Fruit) obj;retur Objects.equals(other.name, this.name);}@Overridepublic int hashCode() {return Objects.hash(this.name);}}
Med ovenstående eksempel har vi først lavet frugten, som senere vil blive brugt i programmet.
Dernæst skal vi oprette filen org.acme.rest.json.FruitService, som vil være brugerlaget i vores applikation. For at gøre dette, brug koden nedenfor.
pakke org.acme.rest.json;import com.mongodb.client.MongoClient;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import org.bson.Document;import javax.enterprise .context.ApplicationScoped;import javax.inject.Inject;import java.util.ArrayList;import java.util.List;@ApplicationScopedpublic class FruitService {@Inject MongoClient mongoClient;public List list(){List list =new ArrayList<>( );MongoCursor cursor =getCollection().find().iterator();try {while (cursor.hasNext()) {Document document =cursor.next();Fruit fruit =new Fruit();fruit.setName(document .getString("navn"));fruit.setDescription(document.getString("description"));list.add(fruit);}} til sidst {cursor.close();}returliste;}offentlig ugyldig tilføjelse(Fruit) fruit){Document document =new Document().append("navn", fruit.getName()).append("description", fruit.getDescription());getCollection().insertOne(document);}privat MongoCollection getCollection (){return mongoClient.getDatabase("frugt").getCollection ("fruit");}}Nu skal vi redigere org.acme.rest.json.FruitResource-klassen, så den passer til vores behov. For at gøre dette skal du bruge koden nedenfor.@Path("/fruits")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)public class FruitResource {@Inject FruitService fruitService;@GETpublic List list() {return fruitService.list();}@POSTpublic List add(Fruit fruit) {fruitService.add(fruit);return list();}}
Fortsæt med trin 3.
Trin #3:Konfiguration af mongoDb-databasen
Syntaksen samt standardkoden til konfiguration af mongoDb-databasen er som angivet nedenfor.
# konfigurer mongoDB-klienten til et replikasæt med to nodesquarkus.mongodb.connection-string =mongodb://mongo1:27017,mongo2:27017
I vores tilfælde vil vi gøre brug af følgende kode til at konfigurere databasen.
# konfigurer mongoDB-klienten til et replikasæt med to nodesquarkus.mongodb.connection-string =mongodb://localhost:27017
Fortsæt med trin 4.
Trin #4:Kørsel af den konfigurerede MongoDB-database
Det næste trin er at køre MongoDB-databasen, vi lige har oprettet. For at gøre dette skal du bruge koden nedenfor.
docker run -ti --rm -p 27017:27017 mongo:4.0
Fortsæt med trin 5.
Trin #5:Lav frontend
Nu hvor alt arbejdet i applikationens backend er udført, lad os tage et kig på koden, der bruges til at kode frontenden af vores applikation.
pakke org.acme.rest.json;import io.quarkus.mongodb.ReactiveMongoClient;import io.quarkus.mongodb.ReactiveMongoCollection;import org.bson.Document;import javax.enterprise.context.ApplicationScoped;import javax.inject .Inject;import java.util.List;import java.util.concurrent.CompletionStage;@ApplicationScopedpublic class ReactiveFruitService {@InjectReactiveMongoClient mongoClient;public CompletionStagelist(){return getCollection().find().map(doc -> {Fruit fruit =new Fruit();fruit.setName(doc.getString("navn"));fruit.setDescription(doc.getString("description"));retur fruit;}).toList().run( );}public CompletionStage add(Fruit fruit){Document document =new Document().append("navn", fruit.getName()).append("description", fruit.getDescription());return getCollection(). insertOne(document);}privat ReactiveMongoCollection getCollection(){retur mongoClient.getDatabase("fruit").getCollection("fruit");}}pakke org.acme.rest.json;import javax.inject.Inject;import javax. ws.rs.*;imp ort javax.ws.rs.core.MediaType;import java.util.List;import java.util.concurrent.CompletionStage;@Path("/reactive_fruits")@Produces(MediaType.APPLICATION_JSON)@Consumes(MediaType.APPLICATION_JSON)publication klasse ReactiveFruitResource {@Inject ReactiveFruitService fruitService;@GETpublic CompletionStage
list() {return fruitService.list();}@POSTpublic CompletionStage
add(Fruit fruit) {fruitService.add(fruit);return list(); }}
I ovenstående eksempel gør vi brug af en reaktiv mongoDb-klient for at lette dannelsen af frontend.
Fortsæt med trin 6.
Trin #6:Simplificering af mongoDb-klienten ved hjælp af BSON-codec
For at gøre dette skal du bruge koden nedenfor.
pakke org.acme.rest.json.codec;import com.mongodb.MongoClient;import org.acme.rest.json.Fruit;import org.bson.*;import org.bson.codecs.Codec;import org .bson.codecs.CollectibleCodec;import org.bson.codecs.DecoderContext;import org.bson.codecs.EncoderContext;import java.util.UUID;offentlig klasse FruitCodec implementerer CollectibleCodec {private final Codec documentCodec;public Fruitis.() documentCodec =MongoClient.getDefaultCodecRegistry().get(Document.class);}@Overridepublic void encode(BsonWriter writer, Fruit fruit, EncoderContext encoderContext) {Document doc =new Document();doc.put("name", fruit.getName ());doc.put("description", fruit.getDescription());documentCodec.encode(writer, doc, encoderContext);}@Overridepublic Class getEncoderClass() {return Fruit.class;}@Overridepublic Fruit generateIdIfAbsentFromDocument(Fruit dokument) {if (!documentHasId(dokument)) {document.setId(UUID.randomUUID().toString());}returdokument;}@Overridepublic boolean documentHasId(Fruit docu ment) {return document.getId() !=null;}@Overridepublic BsonValue getDocumentId(Fruit document) {return new BsonString(document.getId());}@Overridepublic Fruit decode(BsonReader reader, DecoderContext decoderContext) {Document documentCodec.decode(reader, decoderContext);Fruit fruit =new Fruit();if (document.getString("id") !=null) {fruit.setId(document.getString("id"));}fruit.setName (document.getString("navn"));fruit.setDescription(document.getString("beskrivelse"));retur frugt;}}
Nu vil vi gøre brug af en CodecProvider til at linke dette til Fruit-klassen, der allerede er til stede.
pakke org.acme.rest.json.codec;import org.acme.rest.json.Fruit;import org.bson.codecs.Codec;import org.bson.codecs.configuration.CodecProvider;import org.bson. codecs.configuration.CodecRegistry;public class FruitCodecProvider implementerer CodecProvider {@Overridepublic Codec get(Class clazz, CodecRegistry registry) {if (clazz ==Fruit.class) {return (Codec) new FruitCodec();}return null;} /pre>Fortsæt med trin 7.
Trin #7:Endelig kode
Den endelige kode for denne applikation vil se nogenlunde sådan ud.
pakke org.acme.rest.json;import com.mongodb.client.MongoClient;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import javax.enterprise.context.ApplicationScoped;import javax .inject.Inject;import java.util.ArrayList;import java.util.List;@ApplicationScopedpublic class CodecFruitService {@Inject MongoClient mongoClient;public List list(){List list =new ArrayList<>();MongoCursor cursor =getCollection( ).find().iterator();prøv {mens (cursor.hasNext()) {list.add(cursor.next());}} til sidst {cursor.close();}returliste;}offentlig ugyldig tilføjelse (Fruit fruit){getCollection().insertOne(fruit);}privat MongoCollection getCollection(){retur mongoClient.getDatabase("fruit").getCollection("fruit", Fruit.class);}}Konklusion
Nu ved du, hvordan du konfigurerer og bruger MongoDB-klienten i dit system. Gå videre og prøv disse koder i dit system, og fortæl os din oplevelse.
Artikeloversigt
Lær alt om MongoDB-klienten, og hvordan du kan konfigurere den samme i dit system til forskellige formål. Læs videre for at vide mere.
Med dette kommer vi til slutningen af “ MongoDB-klient” artikel.
Kommende batches til MongoDB-certificeringskursus
Kursusnavn | Dato | |
---|---|---|
MongoDB-certificeringskursus | Undervisningen starter den 4. juni 2022 4. juni SAT&SUN (Weekend Batch) | Se detaljer |
MongoDB-certificeringskursus | Undervisningen starter den 6. august 2022 6. august SAT&SUN (Weekend Batch) | Se detaljer |