maio 31st, 2011Java + MongoDB + Spring Data
Olá.
A alguns dias escrevi um post sobre PHP + MongoDB e recebi um feedback muito positivo
então resolvi repetir a dose e mostrar um pouco da integração entre Java e MongoDB.
Na minha opinião essa é uma das principais vantagens do MongoDB em relação a outros bancos de dados NoSQL,
O MongoDB e extremamente fácil de se integrar com a maioria das linguagens.

Neste Post vou falar um pouco sobre o MongoDB e a integração com o java utilizando o Spring Data.
O MongoDB fornece o mongo-java-driver que atualmente esta na versão 2.6.X é uma API completa para acessar o MongoDB.
O Spring Data é um projeto recente, lançado em 2010, ele oferecer suporte a novas tecnologias não relacionais, suporte a extensões específicas a bancos de dados relacionais. Spring Data trabalha como uma camada intermediária entre seus POJOs e o MongoDB.
Nesse exemplo estou usando o maven para gerencias as dependências do projeto
Então alem das dependências habituais do projeto: Spring, JUnit e etc.. vamos precisar adiciona ao pow.xml as dependências do MongoDB e Spring Data
Feito isso as dependências do projeto estão configuradas e podemos partir para a configuração do spring.
A configuração é bem simples, nesse exemplo existem apenas 2 beans que configuram o MongoDB e Spring Data mongoTemplate e mongo
O Spring Data oferece uma serie de anotações que permitem mapear o POJO de forma bem similar ao Hibernate/JPA
Contact.java
@Document(collection="contacts") public class Contact { @Id private ObjectId id; private String name; private String email; //getter and setter methods ... }
E é através do mongoTemplate que vamos interagir com o MongoDB por exemplo :
@Autowired MongoTemplate template; // insere um novo registro template.insert("contacts", contact); // insere/altera um registro template.save("contacts", contact); // remove um registro template.remove(contact); // lista todos os registros List list = template.getCollection(collectionName, Contact.class);
Apesar do Spring Data suportar o JPA repository fiz uma implementação genérica para um repositório usando o Spring Data.
GenericRepositoryWithMongo.java – Repositório genérico
public abstract class GenericRepositoryWithMongo { @Autowired protected MongoTemplate template; protected Class targetClass; protected String collectionName; @SuppressWarnings("unchecked") public GenericRepositoryWithMongo() { this.targetClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } @PostConstruct public void initCollection() { if(this.targetClass.isAnnotationPresent(Document.class)){ Document document = this.targetClass.getAnnotation(Document.class); this.collectionName = document.collection(); } else{ this.collectionName = this.targetClass.getSimpleName().toLowerCase(); } } public List getCollection() { return template.getCollection(collectionName, targetClass); } public void persist(T entity) { template.insert(collectionName, entity); } public void merge(T entity) { template.save(collectionName, entity); } public void remove(T entity) { template.remove(entity); } public List findAll() { return getCollection(); } public long count() { return getCollection().size(); } }
E então a interface do repositório e sua implementação
ContactRepository.java – Repositório de contatos
public interface ContactRepository { public Contact findByEmail(String email); public void persist(Contact entity); public void merge(Contact entity); public void remove(Contact entity); public List findAll(); }
ContactRepositoryImpl.java – Implementação do repositório de contatos
@Service("contactRepository") @Repository public class ContactRepositoryImpl extends GenericRepositoryWithMongo implements ContactRepository{ public Contact findByEmail(String email) { Criteria criteria = Criteria.where("email").is(email); Query query = new Query(criteria); return template.findOne(query, targetClass); } }
Realmente me surpreendi com a facilidade da integração usando o Spring Data
é um exemplo bem simples da integração porem mais da o caminho das pedras para quem esta se aventurando no mundo NoSQL.
Espero que seja util..Para quem tiver o interesse deixei app no git
https://github.com/FabioBatSilva/spring-mongodbAbraço e até a próxima….
Click aqui para ver o post Original

Fabio B. Silva
http://www.flexria.com.br







