Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Spring Data com MongoDB

894 views

Published on

Você já ouviu falar de banco de dados NoSQL? Já desenvolveu alguma aplicação Java com NoSQL? Nesta palestra iremos estudar um exemplo básico de como utilizar JPA e Spring Data para desenvolver com o banco NoSQL MongoDB.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Spring Data com MongoDB

  1. 1. Spring Data com MongoDB Fabiano Guizellini Modos Arquiteto de Software: HBSIS Twitter: @fmodos Github.com/fmodos
  2. 2. Agenda • NOSQL vs SQL • Document • Key-Value • Column • Graph • MongoDB Java Driver • Spring Data MongoDB
  3. 3. SQL NOSQL
  4. 4. “Different databases are designed to solve different problems. Using a single database engine for all of the requirements usually leads to non- performant solutions; storing transactional data, caching session information, traversing graph of customers and the products their friends bought are essentially different problems.” ― Pramod J. Sadalage, NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence “Complex applications combine different types of problems, so picking the right language for each job may be more productive than trying to fit all aspects into a single language.” ― Pramod J. Sadalage, NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence
  5. 5. SQL: Estrutura e tipo de dados são fixos NOSQL: Estrutura dinâmica e varios modelos de dados.
  6. 6. NoSQL - Modelo de Dados • Document – orientado a JSON (MongoDB) • Graph – oriento grafos (Neo4j) • Key-Value – chave-valor (Redis) • Column – orientado a colunas (Cassandra)
  7. 7. Document JSON ->
  8. 8. Document
  9. 9. Document
  10. 10. Document • Quando Usar? -Armazenamento de analytics -Ecommerce -Blogging • Quando não usar? -Transações complexas -Operações que agrupam varias estruturas
  11. 11. Key-Value (Chave Valor)
  12. 12. Key-Value • Quando Usar? -Armazenar sessão do usuário -Informações de carrinho compra • Quando não usar? -Necessita buscar via query -Operações de relacionamento entre dados
  13. 13. Column
  14. 14. Column • Quando Usar? -Sistemas gerenciamento de conteúdo, -Dados de grande massa, exemplo log • Quando não usar? -Sistema que precisa fazer query com join -Sistema no inicio do desenvolvimento
  15. 15. Graph
  16. 16. Graph • Quando Usar? -Rede social -Navegação em grafos
  17. 17. Java MongoDB Driver • MongoClient -> Connection • DB -> Base de dados • DBCollection -> Tabela • DBObject -> Registro • DBCursor -> ResultSet
  18. 18. BasicDBObject dbobject = new BasicDBObject("nome", “Fabiano").append("sobrenome", “Modos") …. dbobject.get("nome")
  19. 19. Spring Data
  20. 20. Spring Data • MongoDB • Neo4j • Cassandra • JDBC Extensions • Redis • Etc… “This is an umbrella project which contains many subprojects that are specific to a given database”
  21. 21. Spring Data MongoDB • Spring configuration support using Java based @Configuration classes or an XML namespace • MongoTemplate helper class • Java based Query, Criteria, and Update DSLs • GeoSpatial integration • Etc… “The Spring Data MongoDB project provides integration with the MongoDB document database. ”
  22. 22. Configuração <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.6.0.RELEASE</version> </dependency> MongoTemplate template = new MongoTemplate(new SimpleMongoDbFactory(new MongoClient(new ServerAddress("localhost")), "database")) <mongo:mongo host="localhost" port="27017"/> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongo"/> <constructor-arg name="databaseName" value=“database"/> </bean> Depência Maven -> Instanciando um MongoTemplate: SpringContext.xml:
  23. 23. MongoTemplate operations • save - salva o objeto • insert - insere o objeto, caso não exista • insertAll - insere uma lista de objetos • updateFirst - atualiza o primeiro registro de uma query • updateMulti - atualiza todos registros de uma query
  24. 24. Update methods • addToSet - adiciona no array • inc - soma o numero • pop - remove o primeiro item do array • pull - remove o valor do array • pullAll - remove os valores do array • push - adiciona no array • rename - renomeia o campo • set - seta um valor • unset - limpar o valor
  25. 25. MongoTemplate operations • upsert - atualiza ou insere o registro da query • findAndModify – encontra e altera o registro da query • Remove – remove o objeto
  26. 26. MongoTemplate operations • findAll – retorna todos objetos de uma classe • findOne – retorna um objeto da query • findById – retorna o objeto desse id • Find – retorna todos objetos da query • findAndRemove – remove e retorna o primeiro objeto da query
  27. 27. Criteria methods • and – operador ‘e’ exists –se campo existe • gt, gte – maior que, maior igual que • lt, lte – menor que, menor igual que • is – operador ‘=‘ • in – valor esta na lista • not – operador de negação • regex – expressão regular • size – tamanho do array
  28. 28. Full Text Query • Busca por texto em mais de uma propriedade de um documento • @TextIndexed(weight=1) • Query q = TextQuery.searching(new TextCriteria().matching(“java"));
  29. 29. GeoSpatial Query • withinCenter - na area de um Circle • withinCenterSphere - na are de uma Circle • withinBox – na area de uma Box • near – perto de um Point • nearSphere - perto de um Circle • maxDistance – com a distancia maxima de
  30. 30. Exemplos - GeoSpatial Box box = new Box(new Point(-73.99756, 40.73083), new Point(-73.988135, 40.741404)); List<Player> venues = template.find(new Query(Criteria.where("location").withinBox(box)), Player.class); private double[] location; 1. Buscar por uma area
  31. 31. Exemplos - GeoSpatial Point location = new Point(-73.99171, 40.738868); NearQuery query = NearQuery.near(location).maxDistance(new Distance(10, Metrics.MILES)); GeoResults<GuriaSolteira> = operations.geoNear(query, GuriaSolteira.class); 2. Busca por uma distancia maxima
  32. 32. SpringData Repositories • Abstraction to reduce code required to implement data access layers for various persistence stores.
  33. 33. MongoDB Repositories
  34. 34. Referências • http://www.thoughtworks.com/pt/insights/blog/ nosql-databases-overview • http://projects.spring.io/spring-boot/ • http://docs.spring.io/spring- data/mongodb/docs/current/reference/html/ • Livro: NoSQL Distilled • https://spring.io/guides/gs/accessing-data- mongodb/ • http://docs.mongodb.org/manual/

×