1. Présentation
Dans cet article, nous verrons comment intégrer MongoDB, une base de données open source NoSQL très populaire avec un client Java autonome.
MongoDB est écrit en C++ et possède un certain nombre de fonctionnalités solides telles que la réduction de carte, le partitionnement automatique, la réplication, la haute disponibilité, etc.
2. MongoDB
Commençons par quelques points clés sur MongoDB lui-même :
- stocke les données dans des documents de type JSON qui peuvent avoir différentes structures
- utilise des schémas dynamiques, ce qui signifie que nous pouvons créer des enregistrements sans rien prédéfinir
- la structure d'un enregistrement peut être modifiée simplement en ajoutant de nouveaux champs ou en supprimant des champs existants
Le modèle de données mentionné ci-dessus nous permet de représenter des relations hiérarchiques, de stocker facilement des tableaux et d'autres structures plus complexes.
3. Terminologies
Comprendre les concepts dans MongoDB devient plus facile si nous pouvons les comparer aux structures de bases de données relationnelles.
Voyons les analogies entre Mongo et un système MySQL traditionnel :
- Tableau dans MySQL devient une Collection en mongo
- Ligne devient un Document
- Colonne devient un Champ
- Joints sont définis comme liant et intégré document
C'est une façon simpliste de regarder les concepts de base de MongoDB bien sûr, mais néanmoins utile.
Passons maintenant à la mise en œuvre pour comprendre cette puissante base de données.
4. Dépendances Maven
Nous devons commencer par définir la dépendance d'un pilote Java pour MongoDB :
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
Pour vérifier si une nouvelle version de la bibliothèque a été publiée, suivez les versions ici.
5. Utiliser MongoDB
Commençons maintenant à implémenter les requêtes Mongo avec Java. Nous suivrons avec les opérations CRUD de base car elles sont les meilleures pour commencer.
5.1. Établir une connexion avec MongoClient
Tout d'abord, établissons une connexion à un serveur MongoDB. Avec la version>=2.10.0, nous utiliserons le MongoClient :
MongoClient mongoClient = new MongoClient("localhost", 27017);
Et pour les anciennes versions, utilisez Mongo classe :
Mongo mongo = new Mongo("localhost", 27017);
5.2. Connexion à une base de données
Maintenant, connectons-nous à notre base de données. Il est intéressant de noter que nous n'avons pas besoin d'en créer un. Lorsque Mongo verra que cette base de données n'existe pas, il la créera pour nous :
DB database = mongoClient.getDB("myMongoDb");
Parfois, par défaut, MongoDB s'exécute en mode authentifié. Dans ce cas, nous devons nous authentifier lors de la connexion à une base de données.
Nous pouvons le faire comme présenté ci-dessous :
MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());
5.3. Afficher les bases de données existantes
Affichons toutes les bases de données existantes. Lorsque nous voulons utiliser la ligne de commande, la syntaxe pour afficher les bases de données est similaire à MySQL :
show databases;
En Java, nous affichons les bases de données à l'aide de l'extrait ci-dessous :
mongoClient.getDatabaseNames().forEach(System.out::println);
La sortie sera :
local 0.000GB
myMongoDb 0.000GB
Ci-dessus, local est la base de données Mongo par défaut.
5.4. Créer une collection
Commençons par créer une Collection (table équivalente pour MongoDB) pour notre base de données. Une fois que nous nous sommes connectés à notre base de données, nous pouvons faire une Collection comme :
database.createCollection("customers", null);
Maintenant, affichons toutes les collections existantes pour la base de données actuelle :
database.getCollectionNames().forEach(System.out::println);
La sortie sera :
customers
5.5. Enregistrer – Insérer
La sauvegarde l'opération a une sémantique de sauvegarde ou de mise à jour :si un id est présent, il effectue une mise à jour , sinon - il fait un insert .
Quand nous économisons un nouveau client :
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "Baeldung");
collection.insert(document);
L'entité sera insérée dans une base de données :
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Ensuite, nous allons examiner la même opération :enregistrer – avec mise à jour sémantique.
5.6. Enregistrer – Mettre à jour
Regardons maintenant enregistrer avec mise à jour sémantique, opérant sur un client existant :
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Maintenant, quand nous enregistrons le client existant - nous le mettrons à jour :
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);
La base de données ressemblera à ceci :
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
Comme vous pouvez le voir, dans cet exemple particulier, sauvegarder utilise la sémantique de update , car nous utilisons un objet avec _id donné .
5.7. Lire un document D'une collection
Cherchons un Document dans une Collection en faisant une requête :
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Il affichera le seul document nous avons maintenant dans notre Collection :
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
]
5.8. Supprimer un Document
Passons à notre dernière opération CRUD, suppression :
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
Avec la commande ci-dessus exécutée, notre seul Document sera supprimé de la Collection .