SlideShare ist ein Scribd-Unternehmen logo
MongoDB Munich 2012:
Einführung in Spring Data MongoDB
tobias.trelle@codecentric.de / @tobiastrelle
codecentric AG
Agenda

      Spring Framework

      Spring Data

      Spring Data MongoDB

                 MongoDB-Template
                 Object Mapping
                 Repository Support
                 Beispiele




codecentric AG
Spring Framework


What is Spring?
 Spring is the most popular application development
 framework for enterprise Java™. Millions of
 developers use Spring to create high
 performing, easily testable, reusable code without
 any lock-in.



Quelle: http://www.springsource.org
codecentric AG
Spring Framework

       Leichgewichtes Framework für Java Enterprise Anwendungen

       Kern: IoC-Container für Depedency Injection

       Läuft ohne JEE-Server

       Unterstützt viele Technologie-Stacks




codecentric AG
Spring Framework

Projekte

•     Spring AMQP                  •   Spring Mobile
•     Spring for Android           •   Spring .NET
•     Spring Batch                 •   Spring Roo
•     Spring Data                  •   Spring Security
•     Spring Framework             •   Spring Social
•     Spring Gemfire               •   Spring Web Flow
•     Spring Integration           •   Spring Web Services




Github: https://github.com/SpringSource
codecentric AG
Spring Data
Einheitliches Programmiermodell für RDBMS und NoSQL-Datastores

                                            Spring Data
                                  CrudRepository     PagingAndSortingRepository

                  Spring Data      Spring Data          Spring Data           Spring Data
                      JPA           MongoDB               Neo4j                    …
                 JpaRepository   MongoRepository      GraphRepository
                                 MongoTemplate         Neo4jTemplate


                                                      Embedded     REST


                      JPA        Mongo Java Driver

                     JDBC



                    RDBMS             MongoDB              Neo4j                   …



Quelle: http://www.infoq.com/articles/spring-data-intro
codecentric AG
Spring Data Allgemein

Template
                 Konfiguration von Ressourcen
                 Einheitliches Exception-Handling


Object Mapping
                 Annotationsbasiertes Mapping von Java-Objekten auf DB-Strukturen
                 (Tabellen, Collections, Nodes)
                 Convention over Configuration, viele sinnvolle Default Mappings


Repository Support
                 DAOs werden als Interfaces implementiert
                 Query-Implementierungen werden über Namenskonventionen abgeleitet
                 CRUD-Operation und Paging/Sortieren out-of-the-box




codecentric AG
Spring Data MongoDB

Template
                 Abstraktion vom MongoDB Java Driver
                 Konfiguration von mongod / mongos-Instanzen und Collections
                 Verwaltung von Collections
                 Map/Reduce-Aufrufe


Object Mapping
                 Annotationen @Document, @Field, @Index etc.
                 Klassen werden auf Collections abgebildet, Java-Objekte auf Dokumente


Repository Support
                 Schlüsselwörter werden auf Query-Operator abgebildet
                 Geospatial Queries




codecentric AG
MongoDB Template
Konfiguration

     <!-- Connection to MongoDB server -->
     <mongo:db-factory host="localhost" port="27017" dbname="test" />


     <!-- MongoDB Template -->
     <bean id="mongoTemplate"
          class="org.springframework.data.mongodb.core.MongoTemplate">
          <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
     </bean>

Verwendung

     @Autowired MongoTemplate template;

     template.indexOps(Location.class).ensureIndex(
          new GeospatialIndex("position") );

codecentric AG
MongoDB Template
Ausführliche Konfiguration der Mongo Connection:
<mongo:mongo host="${mongo.host}" port="${mongo.port}">
  <mongo:options
        connections-per-host="${mongo.connectionsPerHost}„
        threads-allowed-to-block-for-connection
        multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}„
        connect-timeout="${mongo.connectTimeout}„
        max-wait-time="${mongo.maxWaitTime}„
        auto-connect-retry="${mongo.autoConnectRetry}„
        socket-keep-alive="${mongo.socketKeepAlive}„
        socket-timeout="${mongo.socketTimeout}„
        slave-ok="${mongo.slaveOk}„
        write-number="1„
        write-timeout="0„
        write-fsync="true"/>
</mongo:mongo>
<mongo:db-factory dbname= "test" mongo-ref="mongo"/>


codecentric AG
MongoDB Template
Konfiguration für Replica Set:


<mongo:mongo
     id="replicaSetMongo"
     replica-set="127.0.0.1:27017,localhost:27018"
/>




codecentric AG
MongoDB Object Mapping
Code Beispiel: Persistenze Domainklasse „User“:


@Document(collection = "usr")
public class User {

     @Id private String id;


     @Indexed private String fullName;


     private Date lastLogin;
    ...
}




codecentric AG
MongoDB Repository Support

       Grundidee:

      für Definition von Queries reicht die Signatur einer Methode, die Implementierung
      wird zur Laufzeit daraus abgeleitet

       Basis-Implementierungen vorhanden für

                 CRUD-Operationen

                 Blättern


                 Sortieren




codecentric AG
MongoDB Repository Support
Konfiguration


     <!-- Package w/ automagic repositories -->
     <mongo:repositories base-package="mongodb" />



Implementierung


     public interface UserRepository extends MongoRepository<User, String> {

                 List<User> findByFullNameLike(String fullName, Sort sort);

                 @Query("{ fullName: ?0 }")
                 List<User> findByTheUsersFullName(String fullName);
     }


codecentric AG
MongoDB Repository Support
Verwendung


@Autowired UserRepository repo;
...


List<User> users;


// custom finder
users = repo.findByFullNameLike("^User", null);


// paging & general finder
Page<User> page = repo.findAll( new PageRequest(2, 2 ) );
users = page.getContent();



codecentric AG
Alles auf einen Blick




codecentric AG
Live Demo




codecentric AG
Was gibt‘s sonst noch?

      Viele Konfigurationsmöglichkeiten

      @CompoundIndex – zusammengesetzte Indexe auf Klassenebene

      @Version – optimistisches Locking auf Anwendungsebene (neu in 1.1.0)

      Template für GridFS-Unterstützung (neu in 1.1.0)

      Geodaten-Unterstützung

      Map/Reduce



codecentric AG
MongoDB User-Gruppen in Düsseldorf / Frankfurt



                  MongoDB User-Gruppe Düsseldorf
                 https://www.xing.com/net/mongodb-dus
                               @MongoDUS
                         Contact: Tobias Trelle




                 MongoDB User-Gruppe Frankfurt/Main
                  https://www.xing.com/net/mongodb-ffm
                                @MongoFFM
                          Contact: Uwe Seiler

codecentric AG
Quellennachweise

      Spring Zitat: http://www.springsource.org


      Spring Logo: https://twitter.com/springsource


      Source Code Beispiele: https://github.com/ttrelle/spring-data-examples/




codecentric AG
QUESTION?

Tobias Trelle

codecentric AG
Merscheider Str. 1
42699 Solingen

tel              +49 (0) 212.233628.47
fax              +49 (0) 212.233628.79
mail             Tobias.Trelle@codecentric.de
twitter          @tobiastrelle

www.codecentric.de
blog.codecentric.de/author/tobias-trelle
www.xing.com/net/mongodb-dus



codecentric AG                                  08.10.2012   21

Weitere ähnliche Inhalte

Was ist angesagt?

Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenLadezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Joomla! User Group Fulda
 
Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDB
Ralf Eggert
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
Florian Hopf
 
MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)
Uwe Printz
 
Suchkiste BibTag 2009
Suchkiste BibTag 2009Suchkiste BibTag 2009
Suchkiste BibTag 2009
nesnu
 
Suchkiste BibTag 2009
Suchkiste BibTag 2009Suchkiste BibTag 2009
Suchkiste BibTag 2009
steilen
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Gregor Biswanger
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
Gregor Biswanger
 
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics – Webinar 3: Schema-Design: Denken in DokumentenBack to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
MongoDB
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen Hacker
Gregor Biswanger
 
Datenbankoptimierung
DatenbankoptimierungDatenbankoptimierung
Datenbankoptimierung
Cenarion Information Systems GmbH
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
NETWAYS
 

Was ist angesagt? (14)

Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenLadezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
 
Zend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDBZend Framework 2 feat. MongoDB
Zend Framework 2 feat. MongoDB
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
 
MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)
 
Suchkiste BibTag 2009
Suchkiste BibTag 2009Suchkiste BibTag 2009
Suchkiste BibTag 2009
 
Suchkiste BibTag 2009
Suchkiste BibTag 2009Suchkiste BibTag 2009
Suchkiste BibTag 2009
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
 
Fly2pdf
Fly2pdfFly2pdf
Fly2pdf
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
Query Result Caching
Query Result CachingQuery Result Caching
Query Result Caching
 
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics – Webinar 3: Schema-Design: Denken in DokumentenBack to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
 
MongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen HackerMongoDB: Security-Tipps gegen Hacker
MongoDB: Security-Tipps gegen Hacker
 
Datenbankoptimierung
DatenbankoptimierungDatenbankoptimierung
Datenbankoptimierung
 
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin GrauelOSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
OSMC 2010 | Logverarbeitung mit syslog-ng - Status und Zukunft by Martin Grauel
 

Andere mochten auch

Rural Minnesota Journal: Who Lives in Minnesota?
Rural Minnesota Journal: Who Lives in Minnesota?Rural Minnesota Journal: Who Lives in Minnesota?
Rural Minnesota Journal: Who Lives in Minnesota?
Center for Rural Policy & Development
 
Budget 2013
Budget 2013Budget 2013
Budget 2013
Alok Jain
 
Ntl overview presentation_long
Ntl overview presentation_longNtl overview presentation_long
Ntl overview presentation_long
Rosalyn Alleman
 
Arra tlr presentation
Arra tlr presentationArra tlr presentation
Arra tlr presentation
Rosalyn Alleman
 
Biologia I
Biologia IBiologia I
Biologia I
bachilleres 5
 
Teaching and explaining vocabulary.pptx
Teaching and explaining vocabulary.pptxTeaching and explaining vocabulary.pptx
Teaching and explaining vocabulary.pptx
Karitho Loaiza Osorio
 
2012 Minnesota Internet Survey: The Digital Divide 2.0 and Beyond
2012 Minnesota Internet Survey: The Digital Divide 2.0 and Beyond2012 Minnesota Internet Survey: The Digital Divide 2.0 and Beyond
2012 Minnesota Internet Survey: The Digital Divide 2.0 and Beyond
Center for Rural Policy & Development
 
Assignment4
Assignment4Assignment4
Assignment4
HHSome
 
DeSmart - get to know us!
DeSmart - get to know us!DeSmart - get to know us!
DeSmart - get to know us!
Ewa Norweg
 
iSTUDENT
iSTUDENTiSTUDENT
iSTUDENT
innovyz
 
Measurements and metrics 10 11
Measurements and metrics 10 11Measurements and metrics 10 11
Measurements and metrics 10 11
jdrinks
 
Vocabulary yr
Vocabulary yrVocabulary yr
Vocabulary yr
jdrinks
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
Tobias Trelle
 
Impact of the great war
Impact of the great warImpact of the great war
Impact of the great war
ally_bally_bee
 
State of Rural Minnesota 2013-preview
State of Rural Minnesota 2013-previewState of Rural Minnesota 2013-preview
State of Rural Minnesota 2013-preview
Center for Rural Policy & Development
 

Andere mochten auch (17)

Rural Minnesota Journal: Who Lives in Minnesota?
Rural Minnesota Journal: Who Lives in Minnesota?Rural Minnesota Journal: Who Lives in Minnesota?
Rural Minnesota Journal: Who Lives in Minnesota?
 
Budget 2013
Budget 2013Budget 2013
Budget 2013
 
Invt ques
Invt quesInvt ques
Invt ques
 
Ntl overview presentation_long
Ntl overview presentation_longNtl overview presentation_long
Ntl overview presentation_long
 
Arra tlr presentation
Arra tlr presentationArra tlr presentation
Arra tlr presentation
 
Biologia I
Biologia IBiologia I
Biologia I
 
Teaching and explaining vocabulary.pptx
Teaching and explaining vocabulary.pptxTeaching and explaining vocabulary.pptx
Teaching and explaining vocabulary.pptx
 
2012 Minnesota Internet Survey: The Digital Divide 2.0 and Beyond
2012 Minnesota Internet Survey: The Digital Divide 2.0 and Beyond2012 Minnesota Internet Survey: The Digital Divide 2.0 and Beyond
2012 Minnesota Internet Survey: The Digital Divide 2.0 and Beyond
 
Assignment4
Assignment4Assignment4
Assignment4
 
DeSmart - get to know us!
DeSmart - get to know us!DeSmart - get to know us!
DeSmart - get to know us!
 
iSTUDENT
iSTUDENTiSTUDENT
iSTUDENT
 
Measurements and metrics 10 11
Measurements and metrics 10 11Measurements and metrics 10 11
Measurements and metrics 10 11
 
Book
BookBook
Book
 
Vocabulary yr
Vocabulary yrVocabulary yr
Vocabulary yr
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
 
Impact of the great war
Impact of the great warImpact of the great war
Impact of the great war
 
State of Rural Minnesota 2013-preview
State of Rural Minnesota 2013-previewState of Rural Minnesota 2013-preview
State of Rural Minnesota 2013-preview
 

Ähnlich wie MongoDB Munich 2012: Spring Data MongoDB

Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Back to Basics – Webinar 2: Ihre erste MongoDB-AnwendungBack to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
MongoDB
 
CSharp development with MongoDB-CSharp
CSharp development with MongoDB-CSharpCSharp development with MongoDB-CSharp
CSharp development with MongoDB-CSharp
lanwin
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlagen
inovex GmbH
 
AngularJs
AngularJsAngularJs
AngularJs
NETUserGroupBern
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
Matthias Jauernig
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
adesso AG
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
OPITZ CONSULTING Deutschland
 
Django - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlinesDjango - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlines
Markus Zapke-Gründemann
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006
Jürg Stuker
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
Eduard Hildebrandt
 
Node.js
Node.jsNode.js
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
Stefan Scheidt
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
Robin Sedlaczek
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
denschu
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios Workshop
Icinga
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Gregor Biswanger
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit Microservices
QAware GmbH
 
Data Vault DWH Automation
Data Vault DWH AutomationData Vault DWH Automation
Data Vault DWH Automation
Torsten Glunde
 
Automatisierung mit grunt
Automatisierung mit gruntAutomatisierung mit grunt
Automatisierung mit grunt
Christian Keuerleber
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
Robin Sedlaczek
 

Ähnlich wie MongoDB Munich 2012: Spring Data MongoDB (20)

Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Back to Basics – Webinar 2: Ihre erste MongoDB-AnwendungBack to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
 
CSharp development with MongoDB-CSharp
CSharp development with MongoDB-CSharpCSharp development with MongoDB-CSharp
CSharp development with MongoDB-CSharp
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlagen
 
AngularJs
AngularJsAngularJs
AngularJs
 
Einführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core MiddlewaresEinführung in ASP.NET Core Middlewares
Einführung in ASP.NET Core Middlewares
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan ScheidtAutomatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
Automatischer Build mit Maven - OPITZ CONSULTING - Stefan Scheidt
 
Django - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlinesDjango - The Web framework for perfectionists with deadlines
Django - The Web framework for perfectionists with deadlines
 
Top 10 Internet Trends 2006
Top 10 Internet Trends 2006Top 10 Internet Trends 2006
Top 10 Internet Trends 2006
 
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture LösungAndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
AndroMDA - Einführung in eine Open Source Model Driven Architecture Lösung
 
Node.js
Node.jsNode.js
Node.js
 
Automatischer Build mit Maven
Automatischer Build mit MavenAutomatischer Build mit Maven
Automatischer Build mit Maven
 
Architekturen für .NET Core-Anwendungen
Architekturen für .NET Core-AnwendungenArchitekturen für .NET Core-Anwendungen
Architekturen für .NET Core-Anwendungen
 
Enterprise Java Batch mit Spring
Enterprise Java Batch mit SpringEnterprise Java Batch mit Spring
Enterprise Java Batch mit Spring
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios Workshop
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Dataservices - Data Processing mit Microservices
Dataservices - Data Processing mit MicroservicesDataservices - Data Processing mit Microservices
Dataservices - Data Processing mit Microservices
 
Data Vault DWH Automation
Data Vault DWH AutomationData Vault DWH Automation
Data Vault DWH Automation
 
Automatisierung mit grunt
Automatisierung mit gruntAutomatisierung mit grunt
Automatisierung mit grunt
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 

Mehr von Tobias Trelle

TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und Mockito
Tobias Trelle
 
NoSQL - Einführung in Graphen-Datenbanken mit Neo4j
NoSQL - Einführung in Graphen-Datenbanken mit Neo4jNoSQL - Einführung in Graphen-Datenbanken mit Neo4j
NoSQL - Einführung in Graphen-Datenbanken mit Neo4j
Tobias Trelle
 
Test Automation for NoSQL Databases
Test Automation for NoSQL DatabasesTest Automation for NoSQL Databases
Test Automation for NoSQL Databases
Tobias Trelle
 
Spring Data, Jongo & Co.
Spring Data, Jongo & Co.Spring Data, Jongo & Co.
Spring Data, Jongo & Co.
Tobias Trelle
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.
Tobias Trelle
 
An introduction to MongoDB and Ruby
An introduction to MongoDB and RubyAn introduction to MongoDB and Ruby
An introduction to MongoDB and Ruby
Tobias Trelle
 
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDBBedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
Tobias Trelle
 
Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDB
Tobias Trelle
 
MongoDB Live Hacking
MongoDB Live HackingMongoDB Live Hacking
MongoDB Live Hacking
Tobias Trelle
 

Mehr von Tobias Trelle (9)

TDD mit JUnit und Mockito
TDD mit JUnit und MockitoTDD mit JUnit und Mockito
TDD mit JUnit und Mockito
 
NoSQL - Einführung in Graphen-Datenbanken mit Neo4j
NoSQL - Einführung in Graphen-Datenbanken mit Neo4jNoSQL - Einführung in Graphen-Datenbanken mit Neo4j
NoSQL - Einführung in Graphen-Datenbanken mit Neo4j
 
Test Automation for NoSQL Databases
Test Automation for NoSQL DatabasesTest Automation for NoSQL Databases
Test Automation for NoSQL Databases
 
Spring Data, Jongo & Co.
Spring Data, Jongo & Co.Spring Data, Jongo & Co.
Spring Data, Jongo & Co.
 
Morphia, Spring Data & Co.
Morphia, Spring Data & Co.Morphia, Spring Data & Co.
Morphia, Spring Data & Co.
 
An introduction to MongoDB and Ruby
An introduction to MongoDB and RubyAn introduction to MongoDB and Ruby
An introduction to MongoDB and Ruby
 
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDBBedCon 2013 - Java Persistenz-Frameworks für MongoDB
BedCon 2013 - Java Persistenz-Frameworks für MongoDB
 
Java Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDBJava Persistence Frameworks for MongoDB
Java Persistence Frameworks for MongoDB
 
MongoDB Live Hacking
MongoDB Live HackingMongoDB Live Hacking
MongoDB Live Hacking
 

MongoDB Munich 2012: Spring Data MongoDB

  • 1. MongoDB Munich 2012: Einführung in Spring Data MongoDB tobias.trelle@codecentric.de / @tobiastrelle codecentric AG
  • 2. Agenda Spring Framework Spring Data Spring Data MongoDB MongoDB-Template Object Mapping Repository Support Beispiele codecentric AG
  • 3. Spring Framework What is Spring? Spring is the most popular application development framework for enterprise Java™. Millions of developers use Spring to create high performing, easily testable, reusable code without any lock-in. Quelle: http://www.springsource.org codecentric AG
  • 4. Spring Framework Leichgewichtes Framework für Java Enterprise Anwendungen Kern: IoC-Container für Depedency Injection Läuft ohne JEE-Server Unterstützt viele Technologie-Stacks codecentric AG
  • 5. Spring Framework Projekte • Spring AMQP • Spring Mobile • Spring for Android • Spring .NET • Spring Batch • Spring Roo • Spring Data • Spring Security • Spring Framework • Spring Social • Spring Gemfire • Spring Web Flow • Spring Integration • Spring Web Services Github: https://github.com/SpringSource codecentric AG
  • 6. Spring Data Einheitliches Programmiermodell für RDBMS und NoSQL-Datastores Spring Data CrudRepository PagingAndSortingRepository Spring Data Spring Data Spring Data Spring Data JPA MongoDB Neo4j … JpaRepository MongoRepository GraphRepository MongoTemplate Neo4jTemplate Embedded REST JPA Mongo Java Driver JDBC RDBMS MongoDB Neo4j … Quelle: http://www.infoq.com/articles/spring-data-intro codecentric AG
  • 7. Spring Data Allgemein Template Konfiguration von Ressourcen Einheitliches Exception-Handling Object Mapping Annotationsbasiertes Mapping von Java-Objekten auf DB-Strukturen (Tabellen, Collections, Nodes) Convention over Configuration, viele sinnvolle Default Mappings Repository Support DAOs werden als Interfaces implementiert Query-Implementierungen werden über Namenskonventionen abgeleitet CRUD-Operation und Paging/Sortieren out-of-the-box codecentric AG
  • 8. Spring Data MongoDB Template Abstraktion vom MongoDB Java Driver Konfiguration von mongod / mongos-Instanzen und Collections Verwaltung von Collections Map/Reduce-Aufrufe Object Mapping Annotationen @Document, @Field, @Index etc. Klassen werden auf Collections abgebildet, Java-Objekte auf Dokumente Repository Support Schlüsselwörter werden auf Query-Operator abgebildet Geospatial Queries codecentric AG
  • 9. MongoDB Template Konfiguration <!-- Connection to MongoDB server --> <mongo:db-factory host="localhost" port="27017" dbname="test" /> <!-- MongoDB Template --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean> Verwendung @Autowired MongoTemplate template; template.indexOps(Location.class).ensureIndex( new GeospatialIndex("position") ); codecentric AG
  • 10. MongoDB Template Ausführliche Konfiguration der Mongo Connection: <mongo:mongo host="${mongo.host}" port="${mongo.port}"> <mongo:options connections-per-host="${mongo.connectionsPerHost}„ threads-allowed-to-block-for-connection multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}„ connect-timeout="${mongo.connectTimeout}„ max-wait-time="${mongo.maxWaitTime}„ auto-connect-retry="${mongo.autoConnectRetry}„ socket-keep-alive="${mongo.socketKeepAlive}„ socket-timeout="${mongo.socketTimeout}„ slave-ok="${mongo.slaveOk}„ write-number="1„ write-timeout="0„ write-fsync="true"/> </mongo:mongo> <mongo:db-factory dbname= "test" mongo-ref="mongo"/> codecentric AG
  • 11. MongoDB Template Konfiguration für Replica Set: <mongo:mongo id="replicaSetMongo" replica-set="127.0.0.1:27017,localhost:27018" /> codecentric AG
  • 12. MongoDB Object Mapping Code Beispiel: Persistenze Domainklasse „User“: @Document(collection = "usr") public class User { @Id private String id; @Indexed private String fullName; private Date lastLogin; ... } codecentric AG
  • 13. MongoDB Repository Support Grundidee: für Definition von Queries reicht die Signatur einer Methode, die Implementierung wird zur Laufzeit daraus abgeleitet Basis-Implementierungen vorhanden für CRUD-Operationen Blättern Sortieren codecentric AG
  • 14. MongoDB Repository Support Konfiguration <!-- Package w/ automagic repositories --> <mongo:repositories base-package="mongodb" /> Implementierung public interface UserRepository extends MongoRepository<User, String> { List<User> findByFullNameLike(String fullName, Sort sort); @Query("{ fullName: ?0 }") List<User> findByTheUsersFullName(String fullName); } codecentric AG
  • 15. MongoDB Repository Support Verwendung @Autowired UserRepository repo; ... List<User> users; // custom finder users = repo.findByFullNameLike("^User", null); // paging & general finder Page<User> page = repo.findAll( new PageRequest(2, 2 ) ); users = page.getContent(); codecentric AG
  • 16. Alles auf einen Blick codecentric AG
  • 18. Was gibt‘s sonst noch? Viele Konfigurationsmöglichkeiten @CompoundIndex – zusammengesetzte Indexe auf Klassenebene @Version – optimistisches Locking auf Anwendungsebene (neu in 1.1.0) Template für GridFS-Unterstützung (neu in 1.1.0) Geodaten-Unterstützung Map/Reduce codecentric AG
  • 19. MongoDB User-Gruppen in Düsseldorf / Frankfurt MongoDB User-Gruppe Düsseldorf https://www.xing.com/net/mongodb-dus @MongoDUS Contact: Tobias Trelle MongoDB User-Gruppe Frankfurt/Main https://www.xing.com/net/mongodb-ffm @MongoFFM Contact: Uwe Seiler codecentric AG
  • 20. Quellennachweise Spring Zitat: http://www.springsource.org Spring Logo: https://twitter.com/springsource Source Code Beispiele: https://github.com/ttrelle/spring-data-examples/ codecentric AG
  • 21. QUESTION? Tobias Trelle codecentric AG Merscheider Str. 1 42699 Solingen tel +49 (0) 212.233628.47 fax +49 (0) 212.233628.79 mail Tobias.Trelle@codecentric.de twitter @tobiastrelle www.codecentric.de blog.codecentric.de/author/tobias-trelle www.xing.com/net/mongodb-dus codecentric AG 08.10.2012 21