Bienvenue dans le tutoriel d’exemple MongoDB Java. Plus tôt, nous avons appris comment installer MongoDB sur des machines Unix et exécuté quelques commandes depuis le terminal. Aujourd’hui, nous examinerons les fonctionnalités du pilote MongoDB Java et comment effectuer des opérations CRUD (Create, Read, Update, Delete) courantes.
MongoDB Java
-
Téléchargement du pilote MongoDB Java
Si vous avez un projet Maven, ajoutez simplement la dépendance ci-dessous pour inclure le pilote Java MongoDB dans votre application.
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.12.3</version> </dependency>
Si vous avez un projet autonome, vous pouvez télécharger le pilote MongoDB Java depuis ce lien et l’inclure dans le chemin de construction de votre projet. Maintenant, passons en revue quelques utilisations de base du pilote Java MongoDB, puis nous examinerons le programme Exemple Java MongoDB pour les opérations CRUD.
-
Création de la connexion MongoDB Java
MongoClient est l’interface entre notre programme Java et le serveur MongoDB.
MongoClient
est utilisé pour créer une connexion, se connecter à la base de données, récupérer les noms de collection et créer/lire/mettre à jour/supprimer des bases de données, des collections, des documents, etc. Une des fonctionnalités du pilote Java MongoDB que j’apprécie le plus est qu’il est thread-safe, donc nous pouvons créer une instance deMongoClient
une fois et la réutiliser. Même si plusieurs threads y accèdent simultanément, une connexion est renvoyée à partir du pool de connexions interne qu’il maintient. Pour chaque requête à la base de données (recherche, insertion, etc.), le thread Java obtiendra une connexion à partir du pool, exécutera l’opération, puis libérera la connexion. Cela signifie que la connexion (le socket) utilisée peut être différente à chaque fois. Voici quelques-unes des méthodes courantes pour se connecter à un serveur MongoDB.MongoClient mongoClient = new MongoClient(); // se connecte à l'hôte et au port par défaut, c'est-à-dire 127.0.0.1:27017 // ou MongoClient mongoClient = new MongoClient( "localhost" ); // se connecte au port par défaut, c'est-à-dire 27017 // ou MongoClient mongoClient = new MongoClient( "localhost" , 27017 ); // devrait toujours être utilisé // ou, pour se connecter à un ensemble de répliques, avec découverte automatique du primaire MongoClient mongoClient = new MongoClient(Arrays.asList(new ServerAddress("localhost", 27017), new ServerAddress("localhost", 27018), new ServerAddress("localhost", 27019)));
-
Connexion à la base de données MongoDB
Une fois que nous avons établi la connexion au serveur MongoDB, la prochaine étape consiste à créer la connexion à la base de données, comme indiqué ci-dessous. Notez que si la base de données n’est pas présente, MongoDB la créera pour vous.
MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("journaldev");
MongoClient fournit une méthode utile pour obtenir tous les noms de base de données, comme indiqué ci-dessous.
MongoClient mongo = new MongoClient("localhost", 27017); List<String> dbs = mongo.getDatabaseNames(); System.out.println(dbs); // [journaldev, local, admin]
Nous pouvons avoir une authentification basée sur l’utilisateur et le mot de passe pour les bases de données, dans ce cas, nous devons fournir des informations d’identification d’autorisation comme ci-dessous.
MongoCredential journaldevAuth = MongoCredential.createPlainCredential("pankaj", "journaldev", "pankaj123".toCharArray()); MongoCredential testAuth = MongoCredential.createPlainCredential("pankaj", "test", "pankaj123".toCharArray()); List<MongoCredential> auths = new ArrayList<MongoCredential>(); auths.add(journaldevAuth); auths.add(testAuth); ServerAddress serverAddress = new ServerAddress("localhost", 27017); MongoClient mongo = new MongoClient(serverAddress, auths);
Si vous utilisez des versions plus anciennes, vous devez fournir les détails d’authentification après avoir obtenu l’objet de base de données comme ci-dessous.
MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("journaldev"); boolean auth = db.authenticate("pankaj", "pankaj123".toCharArray());
Vous pouvez facilement identifier les failles dans l’approche précédente, l’authentification devrait être effectuée à un stade précoce car nous ne pouvons pas nous en remettre. Nous pouvons supprimer une base de données soit en utilisant la méthode
dropDatabase(String db)
de MongoClient, soit en utilisant la méthodedropDatabase()
de DB. Comme nous supprimons la base de données, je préfère utiliser la méthode MongoClient. -
MongoDB et Collections
Chaque base de données peut avoir zéro ou plusieurs collections, elles sont similaires aux tables dans les serveurs de bases de données relationnelles, sauf qu’elles n’ont pas de format spécifique de données. Pensez à une liste générique par rapport à une liste de chaînes dans le langage de programmation Java. Nous pouvons obtenir tous les noms de collections en utilisant le code ci-dessous.
MongoClient mongo = new MongoClient("localhost", 27017); DB db = mongo.getDB("journaldev"); Set<String> collections = db.getCollectionNames(); System.out.println(collections); // [datas, names, system.indexes, users]
Nous pouvons obtenir une collection spécifique en fournissant son nom, comme indiqué ci-dessous.
DB db = mongo.getDB("journaldev"); DBCollection col = db.getCollection("users");
Encore une fois, si la collection n’existe pas, MongoDB la créera pour vous. Toutes les données dans MongoDB vont dans une collection, donc à ce stade, nous sommes prêts à effectuer des opérations d’insertion/mise à jour/suppression. Nous pouvons utiliser la méthode
drop()
deDBCollection
pour supprimer une collection de la base de données. -
Exemple Java MongoDB
Even though we can work on any valid JSON document in MongoDB collection, in real life we have POJO classes that are mapped with these data. So I will create a java bean and use it for my examples. `User.java`
```
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;
}
}
```
Here is the complete MongoDB java example program showing all the CRUD operations one by one. `MongoDBExample.java`
```
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");
//créer utilisateur
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());
//exemple de lecture
DBObject query = BasicDBObjectBuilder.start().add("_id", user.getId()).get();
DBCursor cursor = col.find(query);
while(cursor.hasNext()){
System.out.println(cursor.next());
}
//exemple de mise à jour
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());
//exemple de suppression
result = col.remove(query);
System.out.println(result.getUpsertedId());
System.out.println(result.getN());
System.out.println(result.isUpdateOfExisting());
System.out.println(result.getLastConcern());
//fermer les ressources
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;
}
}
```
A sample execution results in following output.
```
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)
```
Notice that I am saving User id with **\_id** name, this is a reserved key for the primary key of any record in the collection. If we don't provide one, MongoDB will create one for us. It's like sequencer or auto increment column in relational database tables. Since I am deleting the created record, further execution won't cause any issues. But if there are duplicate record, then we will get below errors.
```
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)
```
C’est tout pour commencer avec le pilote Java MongoDB, nous examinerons plus de fonctionnalités dans les prochains articles.
Source:
https://www.digitalocean.com/community/tutorials/mongodb-java-crud-example-tutorial