0
Java Development with
      MongoDB
       James Williams
 Software Engineer, BT/Ribbit
Agenda

 Java Driver basics
    Making Connections
    Managing Collections
    BasicDBObjectBuilder
    Document Queries
...
Making a Connection

import com.mongodb.Mongo;
import com.mongodb.DB;

Mongo m = new Mongo();
Mongo m = new Mongo( "localh...
Working with Collections

    Getting all collections in the database
Set<String> colls = db.getCollectionNames();
for (St...
Inserting Documents

BasicDBObject doc = new BasicDBObject();
 doc.put("name", "MongoDB");
doc.put("type", "database");
do...
BasicDBObjectBuilder

    Utility for building objects
    Can coerce Maps (and possibly JSON*) to DBObjects
    Example:
...
Document Queries

DBObject myDoc = coll.findOne();
// can also use
BasicDBObject query = new BasicDBObject(); query.put("i...
GridFS

 mechanism for storing files larger than 4MB
 files are chunked allowing fetching of a portion or out of
 order
 c...
Saving a file to GridFS

def mongo = new Mongo(host)
def gridfs = new GridFS(mongo.getDB("db"))

def save(inputStream, con...
Retrieving/Deleting a file

def retrieveFile(String filename) {
  return gridfs.findOne(filename)
}

def deleteFile(String...
Morphia

 Apache 2 Licensed
 brings Hibernate/JPA paradigms to MongoDB
 allows annotating of POJOs to make converting them...
Morphia Annotations

 @Id
 @Entity
 @Embedded
 @Reference
 @Indexed
 @Serialized
 @Property
Creating a Morphia POJO

import com.google.code.morphia.annotations.*;

@Entity("collectionName")
public class Contact {
 ...
Mapping a POJO to a Mongo doc

Morphia morphia = ...;
Mongo mongo = ...;
DB db = mongo.getDB("contacts");

Contact contact...
Getting a POJO from a Mongo doc

Morphia morphia = ...;
Mongo mongo = ...;
DB db = mongo.getDB("contacts");

String contac...
DAOs

 Encapsulate saving and retrieving objects
 Auto-converts to and from POJOs
 Can provide constraints on searches
 Ke...
DAO Example

import com.mongodb.Mongo
import com.google.code.morphia.*

class EntryDAO extends DAO<BlogEntry,String> {
   ...
Constraints Examples

dao.find(new Constraints()                                    .
orderByDesc("dateCreated")
).asList(...
Beyond the Java Language
MongoDB with Groovy

 Metaprogramming with MongoDB can reduce LOC
 Dynamic finders
 Fluent interface mirroring Ruby and Py...
Groovy + MongoDB

Java
BasicDBObject doc = new BasicDBObject();
doc.put("name", "MongoDB");
doc.put("type", "database");
d...
Dynamic Finders

    can build complex queries at runtime
    can even reach into objects for addition query parameters

E...
How dynamic finders work

 Groovy receives the request for the method
 The method is not found (invoking methodMissing)
 T...
MongoDB Grails Plugin

 Replaces JDBC layer in Grails applications
 Can use dynamic finders
 Requires only slight modifica...
Links

  Personal Blog: http://jameswilliams.be/blog
  Twitter: http://twitter.com/ecspike

  Morphia: http://code.google....
Upcoming SlideShare
Loading in...5
×

Java development with MongoDB

49,572

Published on

Presented at MongoSF on April 30, 2010.

Published in: Technology
2 Comments
28 Likes
Statistics
Notes
No Downloads
Views
Total Views
49,572
On Slideshare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
560
Comments
2
Likes
28
Embeds 0
No embeds

No notes for slide

Transcript of "Java development with MongoDB"

  1. 1. Java Development with MongoDB James Williams Software Engineer, BT/Ribbit
  2. 2. Agenda Java Driver basics Making Connections Managing Collections BasicDBObjectBuilder Document Queries GridFS Morphia Beyond the Java language Groovy utilities Grails plugin
  3. 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. 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("testCollection")
  5. 5. Inserting Documents BasicDBObject doc = new BasicDBObject(); doc.put("name", "MongoDB"); doc.put("type", "database"); doc.put("count", 1); BasicDBObject info = new BasicDBObject(); info.put("x", 203); info.put("y", 102); doc.put("info", info); coll.insert(doc);
  6. 6. BasicDBObjectBuilder Utility for building objects Can coerce Maps (and possibly JSON*) to DBObjects Example: BasicDBObjectBuilder.start() .add( "name" , "eliot" ) .add( "number" , 17 ) .get();
  7. 7. Document Queries DBObject myDoc = coll.findOne(); // can also use BasicDBObject query = new BasicDBObject(); query.put("i", 71); DBCursor cur = coll.find(query);
  8. 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. 9. Saving a file to GridFS def mongo = new Mongo(host) def gridfs = new GridFS(mongo.getDB("db")) def save(inputStream, contentType, filename) { def inputFile = gridfs.createFile(inputStream) inputFile.setContentType(contentType) inputFile.setFilename(filename) inputFile.save() }
  10. 10. Retrieving/Deleting a file def retrieveFile(String filename) { return gridfs.findOne(filename) } def deleteFile(String filename) { gridfs.remove(filename) }
  11. 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. 12. Morphia Annotations @Id @Entity @Embedded @Reference @Indexed @Serialized @Property
  13. 13. Creating a Morphia POJO import com.google.code.morphia.annotations.*; @Entity("collectionName") public class Contact { @Id private String id; //generated by MongoDB private String firstName; private String lastName; @Embedded private List<PhoneNumber> phoneNumbers; // getters and setters }
  14. 14. Mapping a POJO to a Mongo doc Morphia morphia = ...; Mongo mongo = ...; DB db = mongo.getDB("contacts"); Contact contact = ...; // map the contact to a DBObject DBObject contactObj = morphia.toDBObject(contact); db.getCollection("personal").save(contactObj);
  15. 15. Getting a POJO from a Mongo doc Morphia morphia = ...; Mongo mongo = ...; DB db = mongo.getDB("contacts"); String contactId = ...; //load the object from the collection BasicDBObject idObj = new BasicDBObject( "_id", new ObjectId(contactId) ); BasicDBObject obj = (BasicDBObject) db.getCollection("personal").findOne(idObj); Contact contact = morphia.fromDBObject(Contact.class, obj);
  16. 16. DAOs Encapsulate saving and retrieving objects Auto-converts to and from POJOs Can provide constraints on searches Key functions: get(<mongoId>) find() or find(constraints) findOne(constraints) deleteById(<mongoId>)
  17. 17. DAO Example import com.mongodb.Mongo import com.google.code.morphia.* class EntryDAO extends DAO<BlogEntry,String> { public EntryDAO(Morphia morphia, Mongo mongo) { super(mongo, morphia, "entries") } }
  18. 18. Constraints Examples dao.find(new Constraints() . orderByDesc("dateCreated") ).asList() dao.find( new Constraints() .field("dateCreated").greaterThanOrEqualTo(date).field("title"). equalTo(params.title) ).asList()
  19. 19. Beyond the Java Language
  20. 20. MongoDB with Groovy Metaprogramming with MongoDB can reduce LOC Dynamic finders Fluent interface mirroring Ruby and Python
  21. 21. Groovy + MongoDB Java BasicDBObject doc = new BasicDBObject(); doc.put("name", "MongoDB"); doc.put("type", "database"); doc.put("count", 1); coll.insert(doc); Groovier def doc = [name:"MongoDB",type:"database", count:1, info: [x:203, y:102] ] as BasicDBObject coll.insert(doc) Grooviest (using groovy-mongo) coll.insert([name:"MongoDB", type:"database", info: [x:203, y:102]])
  22. 22. Dynamic Finders can build complex queries at runtime can even reach into objects for addition query parameters Ex. collection.findByAuthorAndPostCreatedGreaterThan(...) collection.findByComments_CreatedOn(...)
  23. 23. 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
  24. 24. 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
  25. 25. 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×