Hvis du har vært noen form for relasjonelt databasestyringssystem for en stund nå, har du sannsynligvis kommet over navnet på . Først introdusert i 2009, i dag er mongoDb et av de mest populære relasjonelle databasestyringssystemene i bransjen. Hovedårsaken til dens vanvittige popularitet til tross for tilstedeværelsen av eldre relasjonelle databaseprogramledere som MySql til stede i markedet, er det store antallet og store allsidighet det gir til bordet. Bruk av MongoDB eliminerer mange behov, blant annet behovet for å opprette en database og definere datatypen hver gang et nytt prosjekt startes. Dagsorden for MongoDB-klientartikkelen:
hvordan konvertere binær til desimal i java
- Forutsetninger for MongoDB Client
- Opprette prosjektet på Maven
- Legger til din aller første JSON-hviletjeneste
- Konfigurere MongoDB-databasen
- Kjører den konfigurerte MongoDB-databasen
- Gjør fronten
- Forenkling av MongoDB-klienten ved hjelp av BSON-kodeken
- Endelig kode
Men for å oppnå maksimal funksjonalitet ut av MongoDB, må man være kjent med MongoDB-klienten, og i denne artikkelen vil vi diskutere nettopp det.
Forutsetninger for MongoDB Client
For at denne artikkelen skal være fullstendig, må du først oppfylle følgende forutsetninger.
Ha en IDE allerede til stede i systemet ditt.
Java Development Kit eller JDK versjon 1.8 og nyere installert med JAVA_HOME konfigurert riktig.
Docker eller MongoDB installert.
Apache Maven versjon 3.5.3 og nyere.
Arkitekturen som vi har laget og brukt i denne guiden er en av de enkleste. Når den utføres, kan brukeren enkelt legge til data og elementer i en liste, hvoretter den automatisk blir oppdatert i databasen.
Sammen med dette har vi sørget for at all kommunikasjon mellom dataene og serveren er i JSON og at alle dataene er lagret i MongoDB.
Følg trinnene nedenfor for å komme i gang med dette prosjektet.
Trinn 1: Opprette prosjektet på Maven
Det første trinnet er alltid å lage et nytt prosjekt, og for å gjøre dette, bruk 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 kjører kommandoen ovenfor, vil IDE importere JSON-B, MongoDb samt RESTEasy / JAX-RS klienter til systemet ditt.
Gå videre med trinn 2.
Trinn 2: Legge til din aller første JSON-hviletjeneste
For å gjøre dette, bruk koden nedenfor. pakke 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 } public String getName () {return name} public void setName (String name) {this.name = name} public String getDescription () {return description} public void setDescription (String description) {this.description = description} @ Override public boolsk er lik (Objekt obj) {hvis (! (obj forekomst av frukt)) {returner falsk} Frukt annen = (Frukt) obj return Objects.equals (other.name, this.name)} @ Override public int hashCode () {return Objects.hash (dette.navn)}}
Med eksemplet ovenfor har vi først laget frukten som senere skal brukes i programmet.
Deretter må vi lage org.acme.rest.json.FruitService-filen som vil være brukerlaget for applikasjonen vår. For å gjøre dette, bruk 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 .Injiser import java.util.ArrayList import java.util.List @ApplicationScoped public class FruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator () ) prøv {while (cursor.hasNext ()) {Document document = cursor.next () Fruit fruit = new Fruit () fruit.setName (document.getString ('name')) fruit.setDescription (document.getString ('description ')) list.add (fruit)}} til slutt {cursor.close ()} returliste} public void add (Fruit fruit) {Document document = new Document () .append (' name ', fruit.getName ()) .append ('beskrivelse', fruit.getDescription ()) getCollection (). insertOne (dokument)} privat MongoCollection getCollection () {return mongoClient.getDatabase ('frukt'). getCol lection ('fruit')}} Nå må vi redigere klassen org.acme.rest.json.FruitResource for å dekke våre behov. For å gjøre dette, bruk koden nedenfor. @Path ('/ fruits') @Produces (MediaType.APPLICATION_JSON) @Consumes (MediaType.APPLICATION_JSON) offentlig klasse FruitResource {@Inject FruitService fruitService @GET public Listeliste () {return fruitService.list ()} @POST public List legg til (Fruktfrukt) {fruitService.add (frukt) returliste ()}}
Trinn 3: Konfigurere mongoDb-databasen
Syntaksen samt standardkoden for konfigurering av mongoDb-databasen er som gitt nedenfor.
hva er en konstruktør i python
# konfigurer mongoDB-klienten for et replikasett med to noder quarkus.mongodb.connection-string = mongodb: // mongo1: 27017, mongo2: 27017
I vårt tilfelle vil vi bruke følgende kode for å konfigurere databasen.
# konfigurer mongoDB-klienten for et replikasett med to noder quarkus.mongodb.connection-string = mongodb: // localhost: 27017
Gå videre med trinn 4.
Trinn 4: Kjører den konfigurerte MongoDB-databasen
Neste trinn er å kjøre MongoDB-databasen vi nettopp opprettet. For å gjøre dette, bruk koden nedenfor.
docker run -ti --rm -p 27017:27017 mongo:4.0
Trinn 5: Å lage frontenden
Nå som alt arbeidet bak i applikasjonen er gjort, la oss ta en titt på koden som brukes til å kode frontenden av applikasjonen vår.
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 @ApplicationScoped public class ReactiveFruitService {@Inject ReactiveMongoClient mongoClient public CompletionStage list () {return getCollection (). find (). map (doc -> {Fruit fruit = new Fruit () fruit.setName ((frukt)) doc.getString ('name')) fruit.setDescription (doc.getString ('description')) return fruit}). toList (). run ()} public CompletionStage add (Fruit fruit) {Document document = new Document () .append ('name', fruit.getName ()) .append ('description', fruit.getDescription ()) returner getCollection (). insertOne (dokument)} privat ReactiveMongoCollection getCollection () {return mongoClient.getDatabase ('fruit' ) .getCollection ('fruit')}} pakke org.acme.rest.json import javax.inject.Inject import javax.ws.rs. * i mport 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) offentlig klasse ReactiveFruit @Inject ReactiveFruitService fruitService @GET public CompletionStage list () {return fruitService.list ()} @POST public CompletionStage add (Fruit fruit) {fruitService.add (fruit) return list ()}}
I eksemplet ovenfor bruker vi en reaktiv mongoDb-klient for å lette dannelsen av frontenden.
dyp læring vs maskinlæring vs mønstergjenkjenning
Gå videre med trinn 6.
Trinn 6: Forenkling av mongoDb-klienten ved hjelp av BSON-kodeken
For å gjøre dette, bruk koden nedenfor.
pakke org.acme.rest.json.codec importerer com.mongodb.MongoClient importerer org.acme.rest.json.Frukt importerer org.bson. * importerer org.bson.codecs.Codec importerer org.bson.codecs.CollectibleCodec importerer org .bson.codecs.DecoderContext import org.bson.codecs.EncoderContext import java.util.UUID offentlig klasse FruitCodec implementerer CollectibleCodec {private final Codec documentCodec public FruitCodec () {this.documentCodec = MongoClient.getDefaultCodecRegistry (). )} @ Override offentlig tomkode (BsonWriter-forfatter, fruktfrukt, EncoderContext encoderContext) {Document doc = nytt dokument () doc.put ('name', fruit.getName ()) doc.put ('beskrivelse', fruit.getDescription ()) documentCodec.encode (writer, doc, encoderContext)} @ Override public Class getEncoderClass () {return Fruit.class} @ Override public Fruit generateIdIfAbsentFromDocument (Fruit document) {if (! documentHasId (document)) {document.setId ( UUID.randomUUID (). ToString ())} returdokument} @ Overstyr offentlig boolsk dokumentHasId ( Fruktdokument) {return document.getId ()! = Null} @ Override public BsonValue getDocumentId (Fruit document) {return new BsonString (document.getId ())} @ Override public Fruit decode (BsonReader reader, DecoderContext decoderContext) {Document document = documentCodec.decode (reader, decoderContext) Fruit fruit = new Fruit () if (document.getString ('id')! = null) {fruit.setId (document.getString ('id'))} fruit.setName (document .getString ('name')) fruit.setDescription (document.getString ('description')) return fruit}}
Nå skal vi bruke en CodecProvider for å koble dette til fruktklassen som allerede er til stede.
pakke org.acme.rest.json.codec importerer org.acme.rest.json.Fruit importerer org.bson.codecs.Codec importerer org.bson.codecs.configuration.CodecProvider importerer org.bson.codecs.configuration.CodecRegistry offentlig klasse FruitCodecProvider implementerer CodecProvider {@Override public Codec get (Class clazz, CodecRegistry registry) {if (clazz == Fruit.class) {return (Codec) new FruitCodec ()} return null}}
Trinn 7: Endelig kode
Den endelige koden for dette programmet, vil se ut som dette.
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 importerer java.util.List @ApplicationScoped public class CodecFruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor cursor = getCollection (). Find (). Iterator () try {while (cursor) .hasNext ()) {list.add (cursor.next ())}} til slutt {cursor.close ()} returliste} public void add (Fruit fruit) {getCollection (). insertOne (fruit)} private MongoCollection getCollection ( ) {return mongoClient.getDatabase ('fruit'). getCollection ('fruit', Fruit.class)}}
Konklusjon
Nå vet du hvordan du konfigurerer og bruker MongoDB-klienten i systemet ditt. Gå videre og prøv disse kodene i systemet ditt og gi oss beskjed om din opplevelse.
Artikkelsammendrag
Lær alt om MongoDB-klienten og hvordan du kan konfigurere det samme i systemet ditt for forskjellige bruksområder. Les videre for å vite mer.
Med dette kommer vi til slutten av ' MongoDB-klient ' artikkel.