1. Visão geral
Neste artigo, veremos como integrar o MongoDB, um banco de dados NoSQL de código aberto muito popular com um cliente Java autônomo.
O MongoDB é escrito em C++ e possui vários recursos sólidos, como redução de mapa, fragmentação automática, replicação, alta disponibilidade etc.
2. MongoDB
Vamos começar com alguns pontos-chave sobre o próprio MongoDB:
- armazena dados em documentos semelhantes a JSON que podem ter várias estruturas
- usa esquemas dinâmicos, o que significa que podemos criar registros sem predefinir nada
- a estrutura de um registro pode ser alterada simplesmente adicionando novos campos ou excluindo os existentes
O modelo de dados mencionado acima nos dá a capacidade de representar relacionamentos hierárquicos, armazenar facilmente arrays e outras estruturas mais complexas.
3. Terminologias
Entender conceitos no MongoDB se torna mais fácil se pudermos compará-los com estruturas de banco de dados relacionais.
Vamos ver as analogias entre o Mongo e um sistema MySQL tradicional:
- Tabela no MySQL se torna uma Coleção em Mongo
- Linha torna-se um Documento
- Coluna torna-se um Campo
- Participações são definidos como vinculando e incorporado documentos
Esta é uma maneira simplista de olhar para os conceitos principais do MongoDB, é claro, mas ainda assim útil.
Agora, vamos mergulhar na implementação para entender esse poderoso banco de dados.
4. Dependências do Maven
Precisamos começar definindo a dependência de um driver Java para MongoDB:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
</dependency>
Para verificar se alguma nova versão da biblioteca foi lançada – acompanhe os lançamentos aqui.
5. Usando o MongoDB
Agora, vamos começar a implementar as consultas do Mongo com Java. Seguiremos com as operações básicas de CRUD, pois elas são as melhores para começar.
5.1. Faça uma conexão com MongoClient
Primeiro, vamos fazer uma conexão com um servidor MongoDB. Com a versão>=2.10.0, usaremos o MongoClient :
MongoClient mongoClient = new MongoClient("localhost", 27017);
E para versões mais antigas use Mongo aula:
Mongo mongo = new Mongo("localhost", 27017);
5.2. Conectando-se a um banco de dados
Agora, vamos nos conectar ao nosso banco de dados. É interessante notar que não precisamos criar um. Quando o Mongo perceber que esse banco de dados não existe, ele o criará para nós:
DB database = mongoClient.getDB("myMongoDb");
Às vezes, por padrão, o MongoDB é executado no modo autenticado. Nesse caso, precisamos autenticar durante a conexão com um banco de dados.
Podemos fazê-lo conforme apresentado abaixo:
MongoClient mongoClient = new MongoClient();
DB database = mongoClient.getDB("myMongoDb");
boolean auth = database.authenticate("username", "pwd".toCharArray());
5.3. Mostrar bancos de dados existentes
Vamos exibir todos os bancos de dados existentes. Quando queremos usar a linha de comando, a sintaxe para mostrar os bancos de dados é semelhante ao MySQL:
show databases;
Em Java, exibimos bancos de dados usando o snippet abaixo:
mongoClient.getDatabaseNames().forEach(System.out::println);
A saída será:
local 0.000GB
myMongoDb 0.000GB
Acima, local é o banco de dados padrão do Mongo.
5.4. Crie uma Coleção
Vamos começar criando uma Coleção (equivalente de tabela para MongoDB) para nosso banco de dados. Depois de nos conectarmos ao nosso banco de dados, podemos fazer uma Coleção como:
database.createCollection("customers", null);
Agora, vamos exibir todas as coleções existentes para o banco de dados atual:
database.getCollectionNames().forEach(System.out::println);
A saída será:
customers
5.5. Salvar – Inserir
Osalvar operação tem semântica de salvar ou atualizar:se um id está presente, ele executa uma atualização , se não – ele faz um inserir .
Quando salvamos um novo cliente:
DBCollection collection = database.getCollection("customers");
BasicDBObject document = new BasicDBObject();
document.put("name", "Shubham");
document.put("company", "Baeldung");
collection.insert(document);
A entidade será inserida em um banco de dados:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Em seguida, veremos a mesma operação - salvar – com atualização semântica.
5.6. Salvar – Atualizar
Vamos agora ver salvar com atualização semântica, operando em um cliente existente:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "Shubham",
"company" : "Baeldung"
}
Agora, quando salvar o cliente existente - vamos atualizá-lo:
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);
O banco de dados ficará assim:
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
Como você pode ver, neste exemplo específico, salvar usa a semântica de atualizar , porque usamos o objeto com determinado _id .
5.7. Ler um Documento De uma Coleção
Vamos procurar um Documento em uma Coleção fazendo uma consulta:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
DBCursor cursor = collection.find(searchQuery);
while (cursor.hasNext()) {
System.out.println(cursor.next());
}
Ele mostrará o único Documento temos até agora em nossa Coleção :
[
{
"_id" : ObjectId("33a52bb7830b8c9b233b4fe6"),
"name" : "John",
"company" : "Baeldung"
}
]
5.8. Excluir um Documento
Vamos avançar para nossa última operação CRUD, exclusão:
BasicDBObject searchQuery = new BasicDBObject();
searchQuery.put("name", "John");
collection.remove(searchQuery);
Com o comando acima executado, nosso único Documento será removido da Coleção .