Spring Data com MongoDB
-
Upload
fabiano-modos -
Category
Software
-
view
192 -
download
4
Transcript of Spring Data com MongoDB
![Page 1: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/1.jpg)
Spring Data com MongoDB
Fabiano Guizellini ModosArquiteto de Software: HBSIS
Twitter: @fmodosGithub.com/fmodos
![Page 2: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/2.jpg)
Agenda
• NOSQL vs SQL• Document• Key-Value• Column• Graph• MongoDB Java Driver• Spring Data MongoDB
![Page 3: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/3.jpg)
SQL NOSQL
![Page 4: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/4.jpg)
“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
![Page 5: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/5.jpg)
SQL: Estrutura e tipo de dados são fixos
NOSQL: Estrutura dinâmica e varios modelos de dados.
![Page 6: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/6.jpg)
NoSQL - Modelo de Dados
• Document – orientado a JSON (MongoDB)
• Graph – oriento grafos (Neo4j)
• Key-Value – chave-valor (Redis)
• Column – orientado a colunas (Cassandra)
![Page 7: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/7.jpg)
Document
JSON ->
![Page 8: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/8.jpg)
Document
![Page 9: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/9.jpg)
Document
![Page 10: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/10.jpg)
Document
• Quando Usar?-Armazenamento de analytics-Ecommerce-Blogging
• Quando não usar?-Transações complexas-Operações que agrupam varias estruturas
![Page 11: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/11.jpg)
Key-Value (Chave Valor)
![Page 12: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/12.jpg)
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
![Page 13: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/13.jpg)
Column
![Page 14: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/14.jpg)
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
![Page 15: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/15.jpg)
Graph
![Page 16: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/16.jpg)
Graph
• Quando Usar?-Rede social-Navegação em grafos
![Page 17: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/17.jpg)
Java MongoDB Driver
• MongoClient -> Connection• DB -> Base de dados• DBCollection -> Tabela• DBObject -> Registro• DBCursor -> ResultSet
![Page 18: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/18.jpg)
BasicDBObject dbobject = new BasicDBObject("nome", “Fabiano").append("sobrenome", “Modos")….dbobject.get("nome")
![Page 19: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/19.jpg)
Spring Data
![Page 20: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/20.jpg)
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”
![Page 21: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/21.jpg)
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. ”
![Page 22: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/22.jpg)
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:
![Page 23: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/23.jpg)
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
![Page 24: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/24.jpg)
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
![Page 25: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/25.jpg)
MongoTemplate operations
• upsert - atualiza ou insere o registro da query
• findAndModify – encontra e altera o registro da query
• Remove – remove o objeto
![Page 26: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/26.jpg)
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
![Page 27: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/27.jpg)
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
![Page 28: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/28.jpg)
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"));
![Page 29: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/29.jpg)
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
![Page 30: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/30.jpg)
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
![Page 31: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/31.jpg)
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
![Page 32: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/32.jpg)
SpringData Repositories
• Abstraction to reduce code required to implement data access layers for various persistence stores.
![Page 33: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/33.jpg)
MongoDB Repositories
![Page 34: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/34.jpg)
![Page 35: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/35.jpg)
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/d
ocs/current/reference/html/
• Livro: NoSQL Distilled• https://spring.io/guides/gs/accessing-data-mo
ngodb/• http://docs.mongodb.org/manual/
![Page 36: Spring Data com MongoDB](https://reader036.fdocuments.in/reader036/viewer/2022062515/55d02058bb61eba5468b460d/html5/thumbnails/36.jpg)
OBRIGADOTHAT’S ALL FOLKS!!!