Java Development with MongoDB (James Williams)

  • 6,464 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
6,464
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
230
Comments
1
Likes
17

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Java Development with MongoDB James Williams Software Engineer, BT/Ribbit
  • 2. Agenda
      • Java Driver basics
        • Making Connections
        • Managing Collections
        • BasicDBObjectBuilder
        • Document Queries
        • GridFS
      • Morphia
      • Beyond the Java language
        • Groovy utilities
        • Grails plugin
  • 3. Making a Connection
    • import com.mongodb.Mongo; 
    • import com.mongodb.DB; 
    • Mongo m = new Mongo(); 
    • Mongo m = new Mongo( "localhost" ); 
    • Mongo m = new Mongo( "localhost" , 27017 ); 
    • DB db = m.getDB( "mydb" );
  • 4. Working with Collections
      • Getting all collections in the database
    • Set<String> colls = db.getCollectionNames(); 
    • for (String s : colls) { 
    •   System.out.println(s); 
    • }
      • Getting a single collection
    • DBCollection coll = db.getCollection(&quot;testCollection&quot;)
  • 5. Inserting Documents
    • BasicDBObject doc = new BasicDBObject();
    • doc.put(&quot;name&quot;, &quot;MongoDB&quot;);
    • doc.put(&quot;type&quot;, &quot;database&quot;);
    • doc.put(&quot;count&quot;, 1);
    • BasicDBObject info = new BasicDBObject();
    • info.put(&quot;x&quot;, 203);
    • info.put(&quot;y&quot;, 102);
    • doc.put(&quot;info&quot;, info);
    • coll.insert(doc);
  • 6. BasicDBObjectBuilder
      • Utility for building objects
      • Can coerce Maps (and possibly JSON*) to DBObjects
      •   Example:
    • BasicDBObjectBuilder.start()
    •      .add( &quot;name&quot; , &quot;eliot&quot; )
    •      .add( &quot;number&quot; , 17 )
    •      .get();
  • 7. Document Queries
    • DBObject myDoc = coll.findOne(); // can also use BasicDBObjectBuilderBasicDBObject query = new BasicDBObject(); query.put(&quot;i&quot;, 71); Cursor cur = coll.find(query);
  • 8. GridFS
      • mechanism for storing files larger than 4MB
      • files are chunked allowing fetching of a portion or out of order
      • chunking is mostly transparent to underlying operating system
      • can store files in buckets, a MongoDB metaphor for folders
      • default is the fs bucket
  • 9. Saving a file to GridFS
    • def mongo = new Mongo(host)
    • def gridfs = new GridFS(mongo.getDB(&quot;db&quot;))
    • def save(inputStream, contentType, filename) {
    •      def inputFile = gridfs.createFile(inputStream)
    •      inputFile.setContentType(contentType)
    •      inputFile.setFilename(filename)
    •      inputFile.save()
    • }
  • 10. Retrieving/Deleting a file
    • def retrieveFile(String filename) {
    •      return gridfs.findOne(filename)
    • }
    • def deleteFile(String filename) {
    •      gridfs.remove(filename)
    • }
  • 11. Morphia
      • Apache 2 Licensed
      • brings Hibernate/JPA paradigms to MongoDB
      • allows annotating of POJOs to make converting them between MongoDB and Java very easy
      • supports DAO abstractions
      • offers type-safe query support
      • compatible with GWT, Guice, Spring, and DI frameworks
  • 12. Creating a Morphia POJO
    • import com.google.code.morphia.annotations.Entity;
    • @Entity(&quot;collectionName&quot;)
    • public class Contact {
    •      @Id
    •      private String id;    //generated by MongoDB
    •      private String firstName;
    •      private String lastName;
    •      @Embedded
    •      private List<PhoneNumber> phoneNumbers;
    •      // getters and setters
    • }
  • 13. Mapping a POJO to a Mongo doc
    • Morphia morphia = ...;
    • Mongo mongo = ...;
    • DB db = mongo.getDB(&quot;contacts&quot;);
    • Contact contact = ...;
    • // map the contact to a DBObject
    • DBObject contactObj = morphia.toDBObject(contact);
    • db.getCollection(&quot;personal&quot;).save(contactObj);
  • 14. Getting a POJO from a Mongo doc
    • Morphia morphia = ...;
    • Mongo mongo = ...;
    • DB db = mongo.getDB(&quot;contacts&quot;);
    • String contactId = ...;
    • //load the object from the collection
    • BasicDBObject idObj = new BasicDBObject(
    •      &quot;_id&quot;, new ObjectId(contactId)
    • );
    • BasicDBObject obj = (BasicDBObject)
    •    db.getCollection(&quot;personal&quot;).findOne(idObj);
    • Contact contact = morphia.fromDBObject(Contact.class, obj);
  • 15. Beyond the Java Language
  • 16. MongoDB with Groovy
      • Metaprogramming with MongoDB can reduce LOC
      • Dynamic finders
      • Fluent interface mirroring Ruby and Python
  • 17. Groovy + MongoDB
    • J ava
    • BasicDBObject doc = new BasicDBObject();
    • doc.put(&quot;name&quot;, &quot;MongoDB&quot;);
    • doc.put(&quot;type&quot;, &quot;database&quot;);
    • doc.put(&quot;count&quot;, 1);
    • coll.insert(doc);
    • Groovier
    • def doc = [name:&quot;MongoDB&quot;,type:&quot;database&quot;, count:1, info:
    •      [x:203, y:102] ] as BasicDBObject
    • coll.insert(doc)
    • Grooviest (using groovy-mongo)
    • coll.insert([name:&quot;MongoDB&quot;, type:&quot;database&quot;, info: [x:203, y:102]])
  • 18. Dynamic Finders
      • can build complex queries at runtime
      • can even reach into objects for addition query parameters
    • Ex.  collection.findByAuthorAndPostCreatedGreaterThan(...)
    •      collection.findByComments_CreatedOn(...)
    •  
  • 19. How dynamic finders work
      • Groovy receives the request for the method
      • The method is not found (invoking methodMissing)
      • The method name used to construct a query template
      • The method is cached
      • The method is invoked with the parameters
      • Future invocations use the cached method
  • 20. MongoDB Grails Plugin
      • Replaces JDBC layer in Grails applications
      • Can use dynamic finders
      • Requires only slight modifications to domain classes
      • http://github.com/mpriatel/mongodb-grails
  • 21. Links
      • Personal Blog: http://jameswilliams.be/blog
      • Twitter: http://twitter.com/ecspike
      • Morphia: http://code.google.com/p/morphia
      • Utilities for Groovy:  http://github.com/jwill/groovy-mongo
      • MongoDB Grails plugin:   http://github.com/mpriatel/mongodb-grails