Primeiras aulas do curso Java e MongoDB: Integre uma webapp Java com um banco NoSQL

Java e MongoDB: Integre uma webapp Java com um banco NoSQL

Introdução - Introdução

Introdução

Bem-vindo ao curso de Java com MongoDB, em que aprenderemos a integrar uma aplicação Java com o banco de dados NoSQL MongoDB da melhor forma. Este curso não entra no mérito de discutir se você deve ou não utilizar este banco de dados, e sim, considera que esta decisão já foi feita e que você precisa aprender a fazer essa integração utilizando Java como linguagem back-end.

Neste curso veremos como criar, alterar, remover e buscar documentos neste banco de dados, e também várias outras integrações comuns do dia-a-dia para quem trabalha com este tipo de banco. Iniciaremos com alguns pequenos exemplos, mas logo criaremos uma aplicação de escola, a Escolalura, que contará com o cadastro dos alunos, buscas gerais e por nome, status de aprovação e reprovação, e também por geolocalização, uma feature fantástica do MongoDB.

Para este curso também esperamos que você já tenha conhecimentos básicos sobre o MongoDB - como criar, listar, buscar, remover e atualizar documentos. Caso contrário, recomendamos que faça o curso de MongoDB.

Esperamos que goste e, para qualquer dúvida, conte sempre com o fórum!

Introdução - Conectando no Mongo

Dica: aqui você pode baixar o projeto inicial para começar o curso.

Conectando no Mongo

O primeiro passo para continuarmos com o curso é que seja instalado o MongoDB em sua máquina. Para isso, abra o site oficial do MongoDB, vá à página de downloads, baixe e siga as instruções de instalação de acordo com seu sistema operacional e plataforma.

Feito isto, precisaremos subir o servidor do MongoDB com o comando mongod. Neste caso utilizaremos a opção --dbpath para indicar onde o servidor deve iniciar o banco de dados da nossa aplicação (escolha um diretório se sua preferência).

mongod --dbpath /Users/alura/Documents/lazaro/javamongo/db

Assim, teremos o servidor do mongo disponível para nós. A mensagem abaixo indica que o servidor está disponível e aguardando por conexões:

2017-08-14T10:21:28.018-0300 I NETWORK  [initandlisten] waiting for connections on port 27017

Precisaremos nos conectar a este banco e, para isso, criaremos nossa aplicação Java do zero. Para não precisarmos gerenciar as dependências manualmente, criaremos um novo projeto Maven. No Elipse, selecionaremos "File > New > Other", e buscando por "maven", o qual abrirá a opção "New Maven project".

Feito isto, selecionaremos a opção de criação de projeto Maven simples.

criando projeto simples do moven

E por último, configuraremos o artifact id e o group id do nosso projeto, que serão JavaMongo e br.com.alura respectivamente.

configurando group id e artifact id

Este passo pode demorar um pouco, pois o maven criará toda a estrutura do projeto. Após isso criaremos a primeira classe Java, que iniciará nossa aplicação, denominada Principal, tendo-se o método main.

public class Principal {
    public static void main(String[] args){

    }
}

Precisaremos nos conectar ao mongo; como faremos isso? Se você já trabalhou com banco de dados e Java antes, sabe que precisamos de um driver, um conector que possibilite o Java a se comunicar com o banco de dados. O o .jar do driver do mongo pode ser baixado em mongodb.github.io/mongo-java-driver/, mas como estamos utilizando o Maven, copiaremos apenas o código da dependência, para que seja adicionado ao nosso pom.xml.

<dependencies>
    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver</artifactId>
        <version>3.4.3</version>
    </dependency>
</dependencies>

Pronto! Agora já podemos nos conectar ao Mongo. Para isso, basta criarmos um cliente Mongo por meio da classe MongoClient, disponibilizada pelo driver.

public class Principal {
    public static void main(String[] args){
        MongoClient cliente = new MongoClient();
    }
}

Após a execução desse pequeno trecho de código, já teremos nossa conexão pronta. Caso a mensagem abaixo seja exibida, significa que já temos a conexão com o Mongo funcionando corretamente:

INFO: Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}

Não precisaremos passar configurações para o cliente Mongo porque, por padrão, o servidor e o cliente usam a configuração em localhost. Caso a configuração fosse outra, precisaríamos deixá-la explícita.

No curso de MongoDB, foi criada uma coleção de alunos, mas nenhum banco de dados. Para a listagem destes, podemos utilizar o comando show databases, que exibirá algo como:

local  0.000GB
test   0.000GB

Essa é uma outra característica padrão do Mongo: se conectarmos e não indicarmos que estamos criando um novo banco, ele o fará caso não exista, ou utilizará o banco test para armazenar as coleções. No curso de MongoDB foi criada uma coleção de alunos que podemos visualizar utilizando o comando db.alunos.find({}).pretty().

{
  "_id" : ObjectId("58fb5f0f9823dc9c0ffccd95"),
  "nome" : "Felipe",
  "data_nascimento" : ISODate("1994-03-26T03:00:00Z"),
  "curso" : {
    "nome" : "Sistemas de informação"
  },
  "notas" : [
    10,
    9,
    4
  ],
  "habilidades" : [
    {
      "nome" : "inglês",
      "nivel" : "avançado"
    },
    {
      "nome" : "taekwondo",
      "nivel" : "básico"
    }
  ],
  "contato" : {
    "endereco" : "R. Dona Avelina, 10 - Vila Mariana, São Paulo - SP, 04111-010",
    "coordinates" : [
      -23.586917,
      -46.633484
    ],
    "type" : "Point"
  }
}
{
  "_id" : ObjectId("58fb5f0f9823dc9c0ffccd96"),
  "nome" : "Celina",
  "data_nascimento" : ISODate("2011-03-09T03:00:00Z"),
  "notas" : [
    10,
    9,
    8
  ],
  "curso" : {
    "nome" : "Química"
  },
  "habilidades" : [
    {
      "nome" : "Inglês",
      "nivel" : "Basico"
    },
    {
      "nome" : "Alemão",
      "nivel" : "Basico"
    }
  ],
  "contato" : {
    "endereco" : "Av. dos Eucaliptos, 300 - Indianópolis, São Paulo - SP, 04517-050",
    "coordinates" : [
      -23.606913,
      -46.673175
    ],
    "type" : "Point"
  }
}
{
  "_id" : ObjectId("58fb5f109823dc9c0ffccd97"),
  "nome" : "Lazaro",
  "data_nascimento" : ISODate("1987-01-30T02:00:00Z"),
  "notas" : [
    10,
    9,
    10
  ],
  "curso" : {
    "nome" : "Análise de Sistemas"
  },
  "habilidades" : [
    {
      "nome" : "Inglês",
      "nivel" : "Basico"
    },
    {
      "nome" : "Alemão",
      "nivel" : "Basico"
    }
  ],
  "contato" : {
    "endereco" : "Av. Ibirapuera, 2120 - Indianópolis, São Paulo - SP, 04028-001",
    "coordinates" : [
      -23.602668,
      -46.661897
    ],
    "type" : "Point"
  }
}

Veja que neste banco há três alunos. Como faremos para selecionar apenas o primeiro Aluno, utilizando Java? Vejamos o código a seguir:

public class Principal {
    public static void main(String[] args){
        MongoClient cliente = new MongoClient();
        MongoDatabase bancoDeDados = cliente.getDatabase("test");
        MongoCollection<Document> alunos = bancoDeDados.getCollection("alunos");
        Document aluno = alunos.find().first();
        System.out.println(aluno);
        cliente.close();
    }
}

Note que agora, utilizando o cliente, usamos o método getDatabase para selecionar o banco de dados do qual queremos realizar as consultas. Depois disso, a partir do banco de dados, utilizaremos o método getCollection para selecionar uma coleção específica.

Depois, por meio dos métodos find e first selecionaremos o primeiro documento dessa coleção, que é um aluno. Imprimimos o documento aluno e depois fechamos a conexão com o banco de dados utilizando o objeto cliente.

Como estamos selecionando o primeiro aluno (primeiro documento), o que se espera é que este documento seja o Felipe. Ao executarmos a aplicação teremos:

Document{{_id=58fb5f0f9823dc9c0ffccd95, nome=Felipe, data_nascimento=Sat Mar 26 00:00:00 BRT 1994, curso=Document{{nome=Sistemas de informação}}, notas=[10.0, 9.0, 4.0], habilidades=[Document{{nome=inglês, nivel=avançado}}, Document{{nome=taekwondo, nivel=básico}}], contato=Document{{endereco=R. Dona Avelina, 10 - Vila Mariana, São Paulo - SP, 04111-010, coordinates=[-23.586917, -46.633484], type=Point}}}}

Ótimo! Temos os dados do Felipe impressos em nosso console e, após digitarmos cliente.close(); teremos a mensagem indicando que a conexão foi encerrada com sucesso:

INFO: Closed connection [connectionId{localValue:2, serverValue:10}] to 127.0.0.1:27017 because the pool has been closed.

Nos próximos passos, nos aprofundaremos ainda mais nesse trecho de código, vendo principalmente a classe Document que, neste caso, representou os dados do aluno.

Para ler mais sobre drivers e ferramentas disponíveis para o MongoDB, recomendamos a leitura da documentação do ecossistema Mongo.

Introdução - Criando novo documento

Criando novo documento

Continuando com as operações básicas do banco de dados, podemos inserir um novo documento, atualizá-lo e também removê-lo. Já vimos como se faz a leitura, e que tudo que precisamos é de um cliente Mongo, a partir do qual selecionamos o banco e manipulamos as coleções. Nelas, realizamos todas as operações: insertOne, insertMany, remove, update e várias outras.

Nosso próximo passo é inserir o aluno João em nossa coleção de alunos. Precisaremos criar um novo documento para isso! No Mongo, os documentos são pares de chave e valor. Cada chave geralmente é uma string, e o valor pode ser qualquer coisa, inclusive outros documentos. A classe Document pode receber em seu construtor o primeiro par de chave e valor, e os demais pares são adicionados ao documento utilizando-se o método append do objeto desta classe. Assim:

Document novoAluno = new Document("nome", "Joao")
  .append("data_nascimento", new Date(2003, 10, 10))
  .append("curso", new Document("nome", "Historia"))
  .append("notas", Arrays.asList(10, 9, 8))
  .append("habilidades", Arrays.asList(
          new Document().append("nome", "Ingles").append("nível", "Básico"),
          new Document().append("nome", "Espanhol").append("nível", "Básico")));

Note que, no construtor, passamos o nome do aluno e os demais campos são preenchidos com o método append, sempre utilizando-se chave e valor. Então criaremos o novo documento com a mesma estrutura dos alunos do curso de MongoDB.

A estrutura do aluno tem os seguintes campos: nome (sendo uma string), data de nascimento (de tipo Date), curso, que é outro documento com nome do curso, um campo "nota", que é um array ou lista de notas, e o campo "habilidades", documentos em um array ou lista em que estão descritos o nome e o nível da habilidade.

Após a criação deste novo aluno, precisaremos utilizar o método insertOne do objeto alunos para inseri-lo na coleção de alunos.

alunos.insertOne(novoAluno);

Podemos executar a classe Principal novamente, e consultar o resultado da inserção no console no Mongo.

{
  "_id" : ObjectId("5991c69c161a4b2483549774"),
  "nome" : "Joao",
  "data_nascimento" : ISODate("3903-11-10T03:00:00Z"),
  "curso" : {
    "nome" : "Historia"
  },
  "notas" : [
    10,
    9,
    8
  ],
  "habilidades" : [
    {
      "nome" : "Ingles",
      "nível" : "Básico"
    },
    {
      "nome" : "Espanhol",
      "nível" : "Básico"
    }
  ]
}

O código da classe Principal se encontra assim:

public class Principal {
    public static void main(String[] args){
        MongoClient cliente = new MongoClient();
        MongoDatabase bancoDeDados = cliente.getDatabase("test");
        MongoCollection<Document> alunos = bancoDeDados.getCollection("alunos");
        Document aluno = alunos.find().first();
        Document novoAluno = new Document("nome", "Joao")
                .append("data_nascimento", new Date(2003, 10, 10))
                .append("curso", new Document("nome", "Historia"))
                .append("notas", Arrays.asList(10, 9, 8))
                .append("habilidades", Arrays.asList(
                        new Document().append("nome", "Ingles").append("nível", "Básico"),
                        new Document().append("nome", "Espanhol").append("nível", "Básico")));

        alunos.insertOne(novoAluno);
        System.out.println(aluno);
        cliente.close();
    }
}

O uso da classe Date está depreciado, porém, por motivos de demonstração nos exemplos do curso ela funciona e é bem útil.

Sobre o curso Java e MongoDB: Integre uma webapp Java com um banco NoSQL

O curso Java e MongoDB: Integre uma webapp Java com um banco NoSQL possui 263 minutos de vídeos, em um total de 49 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

Premium

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$75
à vista R$900
Matricule-se

Premium Plus

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$100
à vista R$1.200
Matricule-se

Max

  • 1112 cursos

    Cursos de programação, UX, agilidade, data science, transformação digital, mobile, front-end, marketing e infra.

  • Certificado de participação

    Certificado de que assistiu o curso e finalizou as atividades

  • App para Android e iPhone/iPad

    Estude até mesmo offline através das nossas apps Android e iOS em smartphones e tablets

  • Projeto avaliado pelos instrutores

    Projeto práticos para entrega e avaliação dos professores da Alura com certificado de aprovação diferenciado

  • Acesso à Alura Start

    Cursos de introdução a tecnologia através de games, apps e ciência

  • Acesso à Alura Língua

    Reforço online de inglês e espanhol para aprimorar seu conhecimento

12X
R$120
à vista R$1.440
Matricule-se
Procurando planos para empresas?
Acesso por 1 ano
Estude 24h/dia onde e quando quiser
Novos cursos toda semana