Hands On Spring DataEric Bottard, Developer Advocate, VMware@ebottardFlorent Biville, Developer, Lateral Thoughts@fbiville...
Eric BOTTARD• Developer Advocate VMware•   @ebottard•   ebottard@vmware.com2
Florent BIVILLE• Développeur chez LateralThoughts•   @fbiville3
“   Spring Data is an umbrella project which    aims to provide a familiar and consistent    Spring-based programming mode...
RelationalJDBCJPA
Document storeMongoDBCouchDB
Column orientedHBaseCassandra
GraphNeo4jOrientDB
Data GridsGemFireCoherenceTerracotta
Key ValueRedisRiak
Big DataHadoop
Templates
Mapping
Mapping• Tells the framework how to store object properties and  relationships• Favors convention over configuration• Does...
Example: MongoDB@Document@CompoundIndexes({    @CompoundIndex(name = "age_idx", def = "{lastName: 1, age: -1}")})public cl...
Repositories
Repositoriespublic interface PersonRepository    extends CrudRepository<User, Long> {       …}No implementation needed!
Magic Finders
Magic Finderspublic interface PersonRepository extends Repository<User, Long> { List<Person> findByEmailAddressAndLastname...
Pagination
Pagination and Dynamic Orderingpublic interface PersonRepository    extends CrudRepository<User, Long> {    Page<User> fin...
Qu eries
Explicit Queriespublic interface ProductsRepository extends JpaRepository<Product, Long> {	   @Query(value = "select p fro...
Cross Store support
Query DSL Integration
REST
REST Shell
Customization
JSON
Mongo DB - schema-less document DBdatabasesmongo> show dbs;  myDatabase 0.3046578 GBmongo> use myDatabase;  collections  m...
MongoDB: Queries as JSON documentsdb.inventory.find({ price:1.99, $or: [   { qty: { $lt: 20 } },   { sale: true } ]})
GridFS - can I haz large objectz?• mongo> show collections;     – fs.chunks     – fs.files• CHUNKS     – 256KB portion of ...
Nodes & Relationships35
Nodes                                                   NoSQL Spring        HELPS_WITH                    standsFor: "Not ...
Cypher
Neo4J - Cypher Query Languagestart doctor=node:characters(character = Doctor)match (doctor)<-[:COMPANION_OF]-(companion)  ...
Image credits•    keys http://www.sxc.hu/photo/1381979•    spiderweb http://www.sxc.hu/photo/1309629•    columns http://ww...
Hands On Spring Data
Hands On Spring Data
Upcoming SlideShare
Loading in...5
×

Hands On Spring Data

1,605
-1

Published on

Slides to the Hands On Spring Data lab, presented in Paris on Dec 10th, 2012. Code exercises are here: https://github.com/ericbottard/hands-on-spring-data

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,605
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
37
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Hands On Spring Data

  1. 1. Hands On Spring DataEric Bottard, Developer Advocate, VMware@ebottardFlorent Biville, Developer, Lateral Thoughts@fbiville© 2012 SpringSource, by VMware
  2. 2. Eric BOTTARD• Developer Advocate VMware• @ebottard• ebottard@vmware.com2
  3. 3. Florent BIVILLE• Développeur chez LateralThoughts• @fbiville3
  4. 4. “ Spring Data is an umbrella project which aims to provide a familiar and consistent Spring-based programming model for for new datastores while retaining store- specific features and capabilities
  5. 5. RelationalJDBCJPA
  6. 6. Document storeMongoDBCouchDB
  7. 7. Column orientedHBaseCassandra
  8. 8. GraphNeo4jOrientDB
  9. 9. Data GridsGemFireCoherenceTerracotta
  10. 10. Key ValueRedisRiak
  11. 11. Big DataHadoop
  12. 12. Templates
  13. 13. Mapping
  14. 14. Mapping• Tells the framework how to store object properties and relationships• Favors convention over configuration• Does not try to shoehorn one model into another (e.g. does not use JPA annotations for Mongo)14
  15. 15. Example: MongoDB@Document@CompoundIndexes({ @CompoundIndex(name = "age_idx", def = "{lastName: 1, age: -1}")})public class Person<T extends Address> { @Id private String id; @Indexed(unique = true) private Integer ssn; @Field("fName") private String firstName; @Indexed private String lastName; @Transient private Integer accountTotal; @DBRef private List<Account> accounts; private T address;
  16. 16. Repositories
  17. 17. Repositoriespublic interface PersonRepository extends CrudRepository<User, Long> { …}No implementation needed!
  18. 18. Magic Finders
  19. 19. Magic Finderspublic interface PersonRepository extends Repository<User, Long> { List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, Stringlastname); // Enables the distinct flag for the query List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, Stringfirstname); List<Person> findPeopleDistinctByLastnameOrFirstname(String lastname, Stringfirstname); // Enabling ignoring case for an individual property List<Person> findByLastnameIgnoreCase(String lastname); // Enabling ignoring case for all suitable properties List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, Stringfirstname); // Enabling static ORDER BY for a query List<Person> findByLastnameOrderByFirstnameAsc(String lastname); List<Person> findByLastnameOrderByFirstnameDesc(String lastname);}
  20. 20. Pagination
  21. 21. Pagination and Dynamic Orderingpublic interface PersonRepository extends CrudRepository<User, Long> { Page<User> findByLastname(String lastname, Pageable pageable); List<User> findByLastname(String lastname, Sort sort); // NOTE: Pageable embeds a Sort}
  22. 22. Qu eries
  23. 23. Explicit Queriespublic interface ProductsRepository extends JpaRepository<Product, Long> { @Query(value = "select p from Product p order by p.rating desc", countQuery = "select count(p) from Product p") Page<Product> findTopRated(Pageable pageable);}
  24. 24. Cross Store support
  25. 25. Query DSL Integration
  26. 26. REST
  27. 27. REST Shell
  28. 28. Customization
  29. 29. JSON
  30. 30. Mongo DB - schema-less document DBdatabasesmongo> show dbs; myDatabase 0.3046578 GBmongo> use myDatabase; collections mongo> show collections; rockCollection colleagueSean mongo> db.rockCollection.find().pretty(); // last call “prettifies” output documents mongo> db.rockCollection.find({name:"The Beatles"}).pretty(); {"_id" : ObjectId("50b7d870744e5ef5eee5224e"), "_class" : "xxx.music.domain.Band", "name" : "The Beatles", [...] }
  31. 31. MongoDB: Queries as JSON documentsdb.inventory.find({ price:1.99, $or: [ { qty: { $lt: 20 } }, { sale: true } ]})
  32. 32. GridFS - can I haz large objectz?• mongo> show collections; – fs.chunks – fs.files• CHUNKS – 256KB portion of a Mongo object (a.k.a. file), stored into collection “fs.chunks”• FILES – Metadata about the file stored into “fs.files”: filename, content type ...• Spring Data brings – GridFsTemplate – GridFsResource (wraps GridFSDBFile)33
  33. 33. Nodes & Relationships35
  34. 34. Nodes NoSQL Spring HELPS_WITH standsFor: "Not Only Data how: "it roxx" SQL"IS_PART_OF Properties Relationship Spring
  35. 35. Cypher
  36. 36. Neo4J - Cypher Query Languagestart doctor=node:characters(character = Doctor)match (doctor)<-[:COMPANION_OF]-(companion) -[:APPEARED_IN]->(episode)return companion.character, count(episode)order by count(episode) desclimit 5
  37. 37. Image credits• keys http://www.sxc.hu/photo/1381979• spiderweb http://www.sxc.hu/photo/1309629• columns http://www.sxc.hu/photo/511217• documents http://www.sxc.hu/photo/913588• umbrella http://www.sxc.hu/photo/1182110• nail http://www.sxc.hu/photo/1101239• relational http://www.sxc.hu/photo/541351• callback http://www.sxc.hu/photo/1134440• repositories http://www.sxc.hu/photo/1352633• pagination http://www.sxc.hu/photo/830250• magic http://www.sxc.hu/photo/829135• cypher http://www.sxc.hu/photo/1118342• mapping http://www.sxc.hu/photo/1147986• grid http://www.sxc.hu/photo/1222068• elephant http://www.sxc.hu/photo/1168187• cross knot http://www.sxc.hu/photo/1396427• rope knot http://www.sxc.hu/photo/1181983• married http://www.sxc.hu/photo/937988• shell http://www.sxc.hu/photo/866402• diesel http://www.sxc.hu/photo/1076436• car tuning http://www.sxc.hu/photo/5877• rest on couch: If you haven’t, go watch Fight Club. NOW.39
  1. A particular slide catching your eye?

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

×