1. Прегледа
В тази статия ще разгледаме интегрирането на MongoDB, много популярна NoSQL база данни с отворен код със самостоятелен Java клиент.
MongoDB е написан на C++ и има доста голям брой солидни функции като намаляване на картата, автоматично споделяне, репликация, висока наличност и т.н.
2. MongoDBа
Нека започнем с няколко ключови точки за самия MongoDB:
- съхранява данни в подобни на JSON документи, които могат да имат различни структури
- използва динамични схеми, което означава, че можем да създаваме записи, без да дефинираме нищо предварително
- структурата на записа може да се промени просто чрез добавяне на нови полета или изтриване на съществуващи
Гореспоменатият модел на данни ни дава възможност да представяме йерархични връзки, лесно да съхраняваме масиви и други по-сложни структури.
3. Терминологиии
Разбирането на концепциите в MongoDB става по-лесно, ако можем да ги сравним със структури на релационни бази данни.
Нека видим аналогиите между Mongo и традиционна MySQL система:
- Таблица в MySQL става колекция в Монго
- Ред става Документ
- Колона става Поле
- Присъединява се се дефинират като свързване и вградени документи
Разбира се, това е опростен начин да разгледате основните концепции на MongoDB, но въпреки това полезен.
Сега нека се потопим в реализацията, за да разберем тази мощна база данни.
4. Зависимости на Maven
Трябва да започнем с дефиниране на зависимостта на Java драйвер за MongoDB:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
За да проверите дали е пусната нова версия на библиотеката – проследете изданията тук.
5. Използване на MongoDB
Сега, нека започнем да внедряваме заявки на Mongo с Java. Ще проследим основните CRUD операции, тъй като те са най-добрите за начало.
5.1. Направете връзка с MongoClient
Първо, нека направим връзка със сървър на MongoDB. С версия>=2.10.0 ще използваме MongoClient :
MongoClient mongoClient = new MongoClient("localhost", 27017);
А за по-стари версии използвайте Mongo клас:
Mongo mongo = new Mongo("localhost", 27017);
5.2. Свързване с база данни
Сега нека се свържем с нашата база данни. Интересно е да се отбележи, че не е необходимо да създаваме такъв. Когато Mongo види, че базата данни не съществува, ще я създаде за нас:
DB database = mongoClient.getDB("myMongoDb");
Понякога по подразбиране MongoDB работи в удостоверен режим. В този случай трябва да се удостоверим, докато се свързваме с база данни.
Можем да го направим, както е представено по-долу:
MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());
5.3. Показване на съществуващи бази данни
Нека покажем всички съществуващи бази данни. Когато искаме да използваме командния ред, синтаксисът за показване на бази данни е подобен на MySQL:
show databases;
В Java показваме бази данни с помощта на фрагмент по-долу:
mongoClient.getDatabaseNames().forEach(System.out::println);
Резултатът ще бъде:
local 0.000GB
myMongoDb 0.000GB
По-горе, местен е базата данни Mongo по подразбиране.
5.4. Създайте колекция
Нека започнем със създаване на колекция (еквивалент на таблица за MongoDB) за нашата база данни. След като се свържем с нашата база данни, можем да създадем Колекция като:
database.createCollection("customers", null);
Сега нека покажем всички съществуващи колекции за текущата база данни:
database.getCollectionNames().forEach(System.out::println);
Резултатът ще бъде:
customers
5.5. Запазване – Вмъкване
Запазване операцията има семантика за запазване или актуализиране:ако е id присъства, извършва актуализация , ако не – прави вмъкване .
Когато запазим нов клиент:
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "Baeldung");
collection.insert(document);
Обектът ще бъде вмъкнат в база данни:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
След това ще разгледаме същата операция – запазване – с актуализация семантика.
5.6. Запазване – Актуализиране
Нека сега да разгледаме запазване с актуализация семантика, работеща върху съществуващ клиент:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Сега, когато запазим съществуващ клиент – ние ще го актуализираме:
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);
Базата данни ще изглежда така:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
Както можете да видите, в този конкретен пример save използва семантиката на актуализация , защото използваме обект с даден _id .
5.7. Прочетете Документ От колекция
Нека потърсим Документ в колекция като направите заявка:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Ще се покаже единственият Документ вече имаме в нашата колекция :
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
]
5.8. Изтриване a Документ
Нека преминем напред към последната ни CRUD операция, изтриване:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
С изпълнена команда по-горе, нашият единствен Документ ще бъде премахнат от колекция .