Tutorials  /  JavaScript

MongoDB Java CRUD Beispiel

Ccentron Redaktion · Februar 2024 ·5 Min. Lesezeit ·JavaScript, Tutorial

Willkommen zum MongoDB Java Beispiel-Tutorial. Zuvor haben wir gelernt, wie man MongoDB auf Unix-Maschinen installiert und einige Befehle im Terminal ausgeführt. Heute werden wir uns die Funktionen des MongoDB Java-Treibers ansehen und wie man gängige CRUD (Create, Read, Update, Delete) Operationen durchführt.

1. MongoDB Java-Treiber Herunterladen

Wenn Sie ein Maven-Projekt haben, fügen Sie einfach die folgende Abhängigkeit hinzu, um den MongoDB Java-Treiber in Ihre Anwendung zu integrieren.

Code
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>2.12.3</version>
</dependency>

Wenn Sie ein eigenständiges Projekt haben, können Sie den MongoDB Java-Treiber von diesem Link herunterladen und ihn in Ihren Projekt-Build-Pfad einbinden. Lassen Sie uns nun einige grundlegende Verwendungen des MongoDB Java-Treibers durchgehen und dann werden wir uns ein MongoDB Java-Beispielprogramm für CRUD-Operationen ansehen.

VM

Passende Infrastruktur bei centron

Node-Anwendungen wollen deployt werden: ccloud³ VMs mit vollem Root-Zugriff ab 3,12 € im Monat – oder gleich als Managed Server, wenn der Betrieb nicht bei Ihnen liegen soll. Cloud Server mieten →

2. Eine MongoDB Java-Verbindung Erstellen

MongoClient ist die Schnittstelle zwischen unserem Java-Programm und dem MongoDB-Server. MongoClient wird verwendet, um eine Verbindung herzustellen, sich mit der Datenbank zu verbinden, Sammlungsnamen abzurufen und Datenbanken, Sammlungen, Dokumente usw. zu erstellen/lesen/aktualisieren/löschen. Eine Funktion des MongoDB Java-Treibers, die ich am meisten mag, ist, dass er thread-sicher ist, sodass wir eine Instanz von MongoClient einmal erstellen und wiederverwenden können. Selbst wenn mehrere Threads gleichzeitig darauf zugreifen, wird eine Verbindung aus dem internen Verbindungspool zurückgegeben, den er verwaltet. Bei jeder Anfrage an die Datenbank (find, insert usw.) erhält der Java-Thread eine Verbindung aus dem Pool, führt die Operation aus und gibt die Verbindung frei. Das bedeutet, dass die verwendete Verbindung (Socket) jedes Mal unterschiedlich sein kann. Unten sind einige der gängigen Methoden, um eine Verbindung zu einem MongoDB-Server herzustellen.

Code
MongoClient mongoClient = new MongoClient(); //connects to default host and port i.e 127.0.0.1:27017
// or
MongoClient mongoClient = new MongoClient( "localhost" ); //connects to default port i.e 27017
// or
MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // should use this always

// or, to connect to a replica set, with auto-discovery of the primary
MongoClient mongoClient = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017),
                                      new ServerAddress("localhost", 27018),
                                      new ServerAddress("localhost", 27019)));

3. Verbindung zur MongoDB-Datenbank

Sobald wir die Verbindung zum MongoDB-Server hergestellt haben, ist der nächste Schritt, die Verbindung zur Datenbank herzustellen, wie unten gezeigt. Beachten Sie, dass MongoDB diese für Sie erstellt, wenn die Datenbank nicht vorhanden ist.

Code
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("journaldev");

MongoClient bietet eine nützliche Methode, um alle Datenbanknamen abzurufen, wie unten gezeigt.

Code
MongoClient mongo = new MongoClient("localhost", 27017);
List dbs = mongo.getDatabaseNames();
System.out.println(dbs); // [journaldev, local, admin]

Wir können eine Benutzer-Passwort-basierte Authentifizierung für Datenbanken haben, in diesem Fall müssen wir Autorisierungsdaten wie unten angegeben bereitstellen.

Code
MongoCredential journaldevAuth = MongoCredential.createPlainCredential("pankaj", "journaldev", "pankaj123".toCharArray());
MongoCredential testAuth = MongoCredential.createPlainCredential("pankaj", "test", "pankaj123".toCharArray());
List auths = new ArrayList();
auths.add(journaldevAuth);
auths.add(testAuth);

ServerAddress serverAddress = new ServerAddress("localhost", 27017);
MongoClient mongo = new MongoClient(serverAddress, auths);

Wenn Sie ältere Versionen verwenden, müssen Sie die Authentifizierungsdetails nach dem Abrufen des Datenbankobjekts wie unten angeben.

Code
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("journaldev");
boolean auth = db.authenticate("pankaj", "pankaj123".toCharArray());

Man kann leicht Fehler im früheren Ansatz erkennen, die Authentifizierung sollte frühzeitig erfolgen, da wir uns davon nicht erholen können. Wir können eine Datenbank entweder mit der MongoClient-Methode dropDatabase(String db) oder mit der DB-Methode dropDatabase() löschen. Da wir die Datenbank löschen, bevorzuge ich die Verwendung der MongoClient-Methode.

4. MongoDB und Sammlungen

Jede Datenbank kann null oder mehrere Sammlungen haben, sie sind wie Tabellen in relationalen Datenbankservern, außer dass Sie kein spezifisches Datenformat haben. Denken Sie daran wie an eine generische Liste im Vergleich zu einer Liste von Strings in der Java-Programmiersprache. Wir können alle Sammlungsnamen mit dem unten stehenden Code abrufen.

Code
MongoClient mongo = new MongoClient("localhost", 27017);
DB db = mongo.getDB("journaldev");
		
Set collections = db.getCollectionNames();
System.out.println(collections); // [datas, names, system.indexes, users]

Wir können eine spezifische Sammlung erhalten, indem wir ihren Namen angeben, wie unten gezeigt.

Code
DB db = mongo.getDB("journaldev");	
DBCollection col = db.getCollection("users");

Wenn die Sammlung nicht existiert, wird MongoDB sie für Sie erstellen. Alle Daten in MongoDB gehen in irgendeine Sammlung, also sind wir an diesem Punkt bereit, Insert/Update/Delete-Operationen durchzuführen. Wir können die Methode DBCollection drop() verwenden, um eine Sammlung aus der Datenbank zu löschen.

5. MongoDB Java-Beispiel

Auch wenn wir mit jedem gültigen JSON-Dokument in einer MongoDB-Sammlung arbeiten können, haben wir im wirklichen Leben POJO-Klassen, die mit diesen Daten verknüpft sind. Daher werde ich eine Java-Bean erstellen und sie für meine Beispiele verwenden.

Go
package com.journaldev.mongodb.model;

public class User {

	private int id;
	private String name;
	private String role;
	private boolean isEmployee;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getRole() {
		return role;
	}
	public void setRole(String role) {
		this.role = role;
	}
	public boolean isEmployee() {
		return isEmployee;
	}
	public void setEmployee(boolean isEmployee) {
		this.isEmployee = isEmployee;
	}
}

Hier ist das vollständige MongoDB Java-Beispielprogramm, das alle CRUD-Operationen nacheinander zeigt. `MongoDBExample.java`

Go
package com.journaldev.mongodb.main;

import java.net.UnknownHostException;

import com.journaldev.mongodb.model.User;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.WriteResult;

public class MongoDBExample {

	public static void main(String[] args) throws UnknownHostException {
	
		User user = createUser();
		DBObject doc = createDBObject(user);
		
		MongoClient mongo = new MongoClient("localhost", 27017);
		DB db = mongo.getDB("journaldev");
		
		DBCollection col = db.getCollection("users");
		
		//create user
		WriteResult result = col.insert(doc);
		System.out.println(result.getUpsertedId());
		System.out.println(result.getN());
		System.out.println(result.isUpdateOfExisting());
		System.out.println(result.getLastConcern());
		
		//read example
		DBObject query = BasicDBObjectBuilder.start().add("_id", user.getId()).get();
		DBCursor cursor = col.find(query);
		while(cursor.hasNext()){
			System.out.println(cursor.next());
		}
		
		//update example
		user.setName("Pankaj Kumar");
		doc = createDBObject(user);
		result = col.update(query, doc);
		System.out.println(result.getUpsertedId());
		System.out.println(result.getN());
		System.out.println(result.isUpdateOfExisting());
		System.out.println(result.getLastConcern());
		
		//delete example
		result = col.remove(query);
		System.out.println(result.getUpsertedId());
		System.out.println(result.getN());
		System.out.println(result.isUpdateOfExisting());
		System.out.println(result.getLastConcern());
		
		//close resources
		mongo.close();
	}

	private static DBObject createDBObject(User user) {
		BasicDBObjectBuilder docBuilder = BasicDBObjectBuilder.start();
								
		docBuilder.append("_id", user.getId());
		docBuilder.append("name", user.getName());
		docBuilder.append("role", user.getRole());
		docBuilder.append("isEmployee", user.isEmployee());
		return docBuilder.get();
	}

	private static User createUser() {
		User u = new User();
		u.setId(2);
		u.setName("Pankaj");
		u.setEmployee(true);
		u.setRole("CEO");
		return u;
	}
	
	

}

Ein Beispiel für die Ausführung ergibt folgendes Ergebnis.

Code
null
0
false
WriteConcern { "getlasterror" : 1} / (Continue on error? false)
{ "_id" : 2 , "name" : "Pankaj" , "role" : "CEO" , "isEmployee" : true}
null
1
true
WriteConcern { "getlasterror" : 1} / (Continue on error? false)
null
1
false
WriteConcern { "getlasterror" : 1} / (Continue on error? false)

Beachten Sie, dass ich die Benutzer-ID mit dem Namen **\_id** speichere, dies ist ein reservierter Schlüssel für den Primärschlüssel eines jeden Datensatzes in der Sammlung. Wenn wir keinen angeben, wird MongoDB einen für uns erstellen. Es ist wie ein Sequenzer oder eine Autoinkrement-Spalte in relationalen Datenbanktabellen. Da ich den erstellten Datensatz lösche, wird eine weitere Ausführung keine Probleme verursachen. Aber wenn es doppelte Datensätze gibt, dann erhalten wir folgende Fehler.

Code
Exception in thread "main" com.mongodb.MongoException$DuplicateKey: { "serverUsed" : "localhost:27017" , "ok" : 1 , "n" : 0 ,
 "err" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: journaldev.users.$_id_  dup key: { : 1 }" , 
"code" : 11000}
	at com.mongodb.CommandResult.getWriteException(CommandResult.java:88)
	at com.mongodb.CommandResult.getException(CommandResult.java:79)
	at com.mongodb.DBCollectionImpl.translateBulkWriteException(DBCollectionImpl.java:314)
	at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:189)
	at com.mongodb.DBCollectionImpl.insert(DBCollectionImpl.java:165)
	at com.mongodb.DBCollection.insert(DBCollection.java:93)
	at com.mongodb.DBCollection.insert(DBCollection.java:78)
	at com.mongodb.DBCollection.insert(DBCollection.java:120)
	at com.journaldev.mongodb.main.MongoDBExample.main(MongoDBExample.java:27)

Das ist alles, um Sie mit dem MongoDB Java-Treiber zu starten, wir werden uns in den nächsten Beiträgen mehr Funktionen ansehen.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie JavaScript
Teilen
Noch offene Fragen?

Unser Team hilft Ihnen bei Ihrem konkreten Setup weiter – von Menschen, die die Plattform selbst betreiben.

War dieses Tutorial hilfreich?

Ihre Antwort wird anonym gespeichert und hilft uns, die Tutorials zu verbessern.

Kommentare

Noch keine Kommentare – stellen Sie die erste Frage zu diesem Tutorial.

Zum Kommentieren anmelden

Kommentare stehen centron-Kunden offen. Melden Sie sich in Ihrem Konto an, um eine Frage zu diesem Tutorial zu stellen.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren