Jeśli od jakiegoś czasu jesteś jakąkolwiek formą systemu zarządzania relacyjnymi bazami danych, prawdopodobnie spotkałeś się z nazwą . Po raz pierwszy wprowadzony w 2009 roku, dziś mongoDb jest jednym z najpopularniejszych systemów zarządzania relacyjnymi bazami danych w branży. Głównym powodem jego szalonej popularności pomimo obecności starszych menedżerów oprogramowania do relacyjnych baz danych, takich jak MySql, obecnych na rynku, jest duża liczba i duża wszechstronność, jaką wnosi do stołu. Korzystanie z MongoDB eliminuje wiele potrzeb, między innymi konieczność tworzenia bazy danych i definiowania typu danych przy każdym uruchomieniu nowego projektu. Agenda artykułu klienta MongoDB:
- Wymagania wstępne dla klienta MongoDB
- Tworzenie projektu na Maven
- Dodanie Twojej pierwszej usługi resztowej JSON
- Konfigurowanie bazy danych MongoDB
- Uruchamianie skonfigurowanej bazy danych MongoDB
- Wykonanie przodu
- Uproszczenie klienta MongoDB za pomocą kodeka BSON
- Ostateczny kod
Aby jednak osiągnąć maksymalną funkcjonalność z MongoDB, należy zapoznać się z klientem MongoDB iw tym artykule omówimy to.
Wymagania wstępne dla klienta MongoDB
Aby w pełni wykorzystać ten artykuł, musisz najpierw spełnić następujące wymagania wstępne.
Miej IDE już obecne w twoim systemie.
Java Development Kit lub JDK w wersji 1.8 lub nowszej zainstalowane z poprawnie skonfigurowanym JAVA_HOME.
Zainstalowano Docker lub MongoDB.
Apache Maven w wersji 3.5.3 i nowszych.
przekonwertować double na integer java
Architektura, którą stworzyliśmy i wykorzystaliśmy w tym przewodniku, jest jedną z najprostszych. Po uruchomieniu użytkownik może łatwo dodać dane i elementy do listy, po czym zostanie ona automatycznie zaktualizowana w bazie danych.
Oprócz tego upewniliśmy się, że cała komunikacja między danymi a serwerem odbywa się w formacie JSON, a wszystkie dane są przechowywane w MongoDB.
Aby rozpocząć pracę z tym projektem, wykonaj czynności opisane poniżej.
Krok 1: Tworzenie projektu na Maven
Pierwszym krokiem jest zawsze stworzenie nowego projektu iw tym celu skorzystaj z następującego kodu.
mvn io.quarkus: quarkus-maven-plugin: 0.22.0: create -DprojectGroupId = org.acme -DprojectArtifactId = using-mongodb-client -DclassName = 'org.acme.rest.json.FruitResource' -Dpath = '/ owoce '-Dextensions =' resteasy-jsonb, mongodb-client '
Po uruchomieniu powyższego polecenia IDE zaimportuje klientów JSON-B, MongoDb, a także RESTEasy / JAX-RS do twojego systemu.
Przechodząc do kroku 2.
Krok # 2: Dodanie pierwszej usługi resztowej JSON
Aby to zrobić, użyj poniższego kodu. pakiet org.acme.rest.json import java.util.Objects public class Fruit {private String name private String opis public Fruit () {} public Fruit (String name, String description) {this.name = name this.description = description } public String getName () {nazwa zwracana} public void setName (nazwa ciągu) {this.name = name} public String getDescription () {opis zwrotu} public void setDescription (opis ciągu) {this.description = opis} @Override public boolean equals (Object obj) {if (! (obj instanceof Fruit)) {return false} Fruit other = (Fruit) obj return Objects.equals (other.name, this.name)} @Override public int hashCode () {return Objects.hash (this.name)}}
W powyższym przykładzie najpierw utworzyliśmy Owoc, który zostanie później użyty w programie.
różnica między jquery a javascript
Następnie musimy stworzyć plik org.acme.rest.json.FruitService, który będzie warstwą użytkownika naszej aplikacji. Aby to zrobić, użyj poniższego kodu.
pakiet 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 @ApplicationScoped public class FruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor kursor = getCollection (). Find (). Iterator ( ) try {while (kursor.hasNext ()) {Document document = cursor.next () Fruit fruit = new Fruit () fruit.setName (document.getString ('name')) fruit.setDescription (document.getString ('description ')) list.add (owoce)}} w końcu {kursor.close ()} powrót lista} public void add (owoce) {Document document = new Document () .append (' name ', fruit.getName ()) .append ('description', fruit.getDescription ()) getCollection (). insertOne (dokument)} private MongoCollection getCollection () {return mongoClient.getDatabase ('fruit'). getCol lection ('fruit')}} Teraz musimy zmodyfikować klasę org.acme.rest.json.FruitResource, aby odpowiadała naszym potrzebom. Aby to zrobić, użyj poniższego kodu. @Path ('/ owoce') @Produces (MediaType.APPLICATION_JSON) @Consumes (MediaType.APPLICATION_JSON) klasa publiczna FruitResource {@Inject FruitService fruitService @GET public List list () {return fruitService.list ()} @POST public List add (Owoce) {fruitService.add (fruit) Return list ()}}
Krok # 3: Konfiguracja bazy danych mongoDb
Poniżej podano składnię oraz standardowy kod do konfiguracji bazy danych mongoDb.
# skonfigurować klienta mongoDB dla zestawu replik dwóch węzłów quarkus.mongodb.connection-string = mongodb: // mongo1: 27017, mongo2: 27017
W naszym przypadku do skonfigurowania bazy danych wykorzystamy poniższy kod.
# skonfiguruj klienta mongoDB dla zestawu replik dwóch węzłów quarkus.mongodb.connection-string = mongodb: // localhost: 27017
Przechodząc do kroku 4.
Krok 4: Uruchomienie skonfigurowanej bazy danych MongoDB
Następnym krokiem jest uruchomienie bazy danych MongoDB, którą właśnie utworzyliśmy. W tym celu skorzystaj z poniższego kodu.
docker run -ti --rm -p 27017: 27017 mongo: 4.0
Krok 5: Wykonanie frontu
Teraz, gdy cała praca na zapleczu aplikacji została wykonana, przyjrzyjmy się kodowi używanemu do zakodowania interfejsu użytkownika naszej aplikacji.
pakiet 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 ( 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 ()) return getCollection (). insertOne (dokument)} private ReactiveMongoCollection getCollection () {return mongoClient.getDatabase ('fruit' ) .getCollection ('fruit')}} pakiet 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) public class Reactive @Inject ReactiveFruitService fruitService @GET public CompletionStage list () {return fruitService.list ()} @POST public CompletionStage add (Fruit fruit) {fruitService.add (fruit) return list ()}}
W powyższym przykładzie korzystamy z reaktywny klient mongoDb ułatwiający tworzenie front-endu.
Przechodząc do kroku 6.
Krok # 6: Uproszczenie klienta mongoDb za pomocą kodeka BSON
W tym celu skorzystaj z poniższego kodu.
pakiet 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 klasa publiczna FruitCodec implementuje CollectibleCodec {private final Codec documentCodec public FruitCodec () {this.documentCodec = MongoClient.getDefaultCodass getRegistry () )} @Override public 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)} @Override public Class getEncoderClass () {return Fruit.class} @Override public Fruit generatedIdIfAbsentFromDocument (dokument owocowy) {if (! documentHasId (dokument)) {document.setId ( UUID.randomUUID (). ToString ())} zwraca dokument} @Override public boolean documentHasId ( Dokument owocowy) {return document.getId ()! = Null} @Override public BsonValue getDocumentId (dokument Fruit) {return new BsonString (document.getId ())} @Override public Fruit decode (BsonReader reader, DecoderContext decoderContext) {Dokument dokumentu = 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}}
Teraz użyjemy CodecProvider, aby połączyć to z już obecną klasą Fruit.
jak zakończyć działanie programu java
pakiet 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 klasa publiczna FruitCodecProvider implementuje CodecProvider {@Override public Codec get (Class clazz, rejestr CodecRegistry) {if (clazz == Fruit.class) {return (Codec) new FruitCodec ()} return null}}
Krok 7: Ostateczny kod
Ostateczny kod tej aplikacji będzie wyglądał mniej więcej tak.
pakiet 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 @ApplicationScoped klasa publiczna CodecFruitService {@Inject MongoClient mongoClient public List list () {List list = new ArrayList () MongoCursor kursor = getCollection (). Find (). Iterator () try {while (kursor .hasNext ()) {list.add (kursor.next ())}} w końcu {kursor.close ()} lista zwrotna} public void add (owoce) {getCollection (). insertOne (owoce)} private MongoCollection getCollection ( ) {return mongoClient.getDatabase ('fruit'). getCollection ('fruit', Fruit.class)}}
Wniosek
Teraz wiesz, jak skonfigurować i używać klienta MongoDB w swoim systemie. Śmiało, wypróbuj te kody w swoim systemie i daj nam znać, jakie masz wrażenia.
Podsumowanie artykułu
Dowiedz się wszystkiego o kliencie MongoDB i o tym, jak skonfigurować go w swoim systemie do różnych zastosowań. Czytaj dalej, aby dowiedzieć się więcej.
W ten sposób dochodzimy do końca ' Klient MongoDB ' artykuł.