1. Übersicht
In diesem Artikel werfen wir einen Blick auf die Integration von MongoDB, einer sehr beliebten NoSQL-Open-Source-Datenbank, mit einem eigenständigen Java-Client.
MongoDB ist in C++ geschrieben und hat eine ganze Reihe solider Features wie Map-Reduce, Auto-Sharding, Replikation, Hochverfügbarkeit etc.
2. MongoDB
Beginnen wir mit ein paar wichtigen Punkten zu MongoDB selbst:
- speichert Daten in JSON-ähnlichen Dokumenten, die verschiedene Strukturen haben können
- verwendet dynamische Schemas, was bedeutet, dass wir Datensätze erstellen können, ohne etwas vorzudefinieren
- Die Struktur eines Datensatzes kann einfach geändert werden, indem neue Felder hinzugefügt oder vorhandene gelöscht werden
Das oben erwähnte Datenmodell gibt uns die Möglichkeit, hierarchische Beziehungen darzustellen, Arrays und andere komplexere Strukturen einfach zu speichern.
3. Terminologien
Das Verständnis von Konzepten in MongoDB wird einfacher, wenn wir sie mit relationalen Datenbankstrukturen vergleichen können.
Sehen wir uns die Analogien zwischen Mongo und einem traditionellen MySQL-System an:
- Tabelle in MySQL wird zu einer Sammlung in Mongo
- Zeile wird zu einem Dokument
- Spalte wird zu einem Feld
- Tritt bei werden als Verlinkung definiert und eingebettet Dokumente
Dies ist natürlich eine vereinfachte Betrachtungsweise der MongoDB-Kernkonzepte, aber dennoch nützlich.
Lassen Sie uns nun in die Implementierung eintauchen, um diese leistungsstarke Datenbank zu verstehen.
4. Maven-Abhängigkeiten
Wir müssen damit beginnen, die Abhängigkeit eines Java-Treibers für MongoDB zu definieren:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
Um zu überprüfen, ob eine neue Version der Bibliothek veröffentlicht wurde, verfolgen Sie die Veröffentlichungen hier.
5. Mit MongoDB
Beginnen wir nun mit der Implementierung von Mongo-Abfragen mit Java. Wir werden mit den grundlegenden CRUD-Vorgängen folgen, da sie die besten für den Anfang sind.
5.1. Stellen Sie eine Verbindung mit MongoClient her
Stellen wir zunächst eine Verbindung zu einem MongoDB-Server her. Bei Version>=2.10.0 verwenden wir den MongoClient :
MongoClient mongoClient = new MongoClient("localhost", 27017);
Und für ältere Versionen verwenden Sie Mongo Klasse:
Mongo mongo = new Mongo("localhost", 27017);
5.2. Herstellen einer Verbindung zu einer Datenbank
Verbinden wir uns jetzt mit unserer Datenbank. Es ist interessant festzustellen, dass wir keine erstellen müssen. Wenn Mongo sieht, dass diese Datenbank nicht existiert, wird sie für uns erstellt:
DB database = mongoClient.getDB("myMongoDb");
Manchmal wird MongoDB standardmäßig im authentifizierten Modus ausgeführt. In diesem Fall müssen wir uns authentifizieren, während wir uns mit einer Datenbank verbinden.
Wir können es wie unten dargestellt machen:
MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());
5.3. Vorhandene Datenbanken anzeigen
Lassen Sie uns alle vorhandenen Datenbanken anzeigen. Wenn wir die Befehlszeile verwenden möchten, ist die Syntax zum Anzeigen von Datenbanken ähnlich wie bei MySQL:
show databases;
In Java zeigen wir Datenbanken mit dem folgenden Snippet an:
mongoClient.getDatabaseNames().forEach(System.out::println);
Die Ausgabe wird sein:
local 0.000GB
myMongoDb 0.000GB
Oben lokal ist die standardmäßige Mongo-Datenbank.
5.4. Erstellen Sie eine Sammlung
Beginnen wir mit dem Erstellen einer Sammlung (Tabellenäquivalent für MongoDB) für unsere Datenbank. Sobald wir uns mit unserer Datenbank verbunden haben, können wir eine Sammlung erstellen als:
database.createCollection("customers", null);
Lassen Sie uns nun alle vorhandenen Sammlungen für die aktuelle Datenbank anzeigen:
database.getCollectionNames().forEach(System.out::println);
Die Ausgabe wird sein:
customers
5.5. Speichern – Einfügen
Die speichern Der Vorgang hat eine Speichern-oder-Aktualisieren-Semantik:Wenn eine id vorhanden ist, führt es ein Update durch , wenn nicht – es macht eine Einfügung .
Wenn wir speichern ein neuer Kunde:
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "Baeldung");
collection.insert(document);
Die Entität wird in eine Datenbank eingefügt:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Als Nächstes sehen wir uns dieselbe Operation an – Speichern – mit aktualisieren Semantik.
5.6. Speichern – Aktualisieren
Sehen wir uns nun speichern an mit aktualisieren Semantik, die auf einem bestehenden Kunden operiert:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Jetzt, wenn wir speichern der bestehende Kunde – wir werden ihn aktualisieren:
BasicDBObject query = new BasicDBObject();
query.put("name", "Shubham");
BasicDBObject newDocument = new BasicDBObject();
newDocument.put("name", "John");
BasicDBObject updateObject = new BasicDBObject();
updateObject.put("$set", newDocument);
collection.update(query, updateObject);
Die Datenbank sieht folgendermaßen aus:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
Wie Sie sehen können, in diesem speziellen Beispiel speichern verwendet die Semantik von update , da wir ein Objekt mit der angegebenen _id verwenden .
5.7. Lesen Sie ein Dokument Aus einer Sammlung
Lassen Sie uns nach einem Dokument suchen in einer Sammlung durch eine Abfrage:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Es wird das einzige Dokument angezeigt haben wir inzwischen in unserer Sammlung :
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
]
5.8. Löschen ein Dokument
Kommen wir zu unserer letzten CRUD-Operation, dem Löschen:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
Mit obigem Befehl ausgeführt, unser einziges Dokument wird aus der Sammlung entfernt .