1
resposta

Outras formas de acessar o MongoDB

No curso é dado um exemplo usando codec, isso é válido quando você tem classes com poucos atributos, mas acredito que faltou algum exemplo para casos em que as classes são muito grandes.

Por exemplo tenho uma classe com uns 35 atributos (já estava assim quando eu cheguei hehehe) nesse caso é totalmente desinteressante usar como é mostrado nas aulas.

Há algum exemplo de como utilizar com spring-data, no spring-boot ? Ou alguma outra forma que não precise utilizar o codec ?

Grato

1 resposta

Olá, Jorge.

JNoSQL

Um projeto que visa criar uma API única para qualquer solução NoSQL. É um projeto da Eclipse Foundation mantido pelo brasileiro Otávio Santana.

Você mapeia sua entidade com anotações parecidas com as do JPA, mas que são do pacote org.jnosql.artemis.

@Entity("Person")
public class Person {

  @Id("id")
  private long id;

  @Column
  private String name;

  @Column
  private Address address;

  @Column
  private List<String> phones;


     //getter, setter e construtor padrão

}

Você pode definir uma interface que estende de org.jnosql.artemis.Repository e o JNoSQL vai cuidar de gerar uma implementação.

public interface PersonRepository extends Repository<Person, Long> {

  List<Person> findByName(String name);

}

Na hora de usar o repositório ficaria algo como o seguinte:

 Random random = new Random();
    Long id = random.nextLong();

    try (SeContainer container = SeContainerInitializer.newInstance().initialize()) {

      Person person =  //cria pessoa...

     //obtem instância do repositório
      PersonRepository repository = container.select(PersonRepository.class)
      .select(DatabaseQualifier.ofDocument()).get();

      //insere
      repository.save(person);

     //busca
      List<Person> people  = repository.findByName("Fulano");

    }

Referência: http://www.jnosql.org/getting_started.html#document

Spring Data MongoDB

Específico para o MongoDB.

Use as anotações parecidas com o JPA, mas do pacote org.springframework.data.annotation.

public class Customer {

    @Id
    public String id;

    private String firstName;
    private String lastName;

    //getter, setter e construtor padrão
}

Crie uma interface que estende de org.springframework.data.mongodb.repository.MongoRepository:

public interface CustomerRepository extends MongoRepository<Customer, String> {

    public Customer findByFirstName(String firstName);
    public List<Customer> findByLastName(String lastName);

}

Injete o repositório:

@Autowired
private CustomerRepository repository;

Use o repositório:

repository.deleteAll();

repository.save(new Customer("Alice", "Smith"));

List<Customer> customers = repository.findAll();

Customer alice  = repository.findByFirstName("Alice");

Referência: https://spring.io/guides/gs/accessing-data-mongodb/

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software