SlideShare a Scribd company logo
Cayenne, OpenJPA, iBatis  Apache Persistence Layers ApacheCon EU 2008 Henning Schmiedehausen [email_address]
The O/R impedance mismatch Objects (Java Knowledge) RDBMS ?
In a nutshell… “ Object-Relational mapping (O/RM), is a programming technique that links databases to object-oriented language concepts, creating (in effect) a ‘virtual object database’.”  –  Wikipedia
Selection criterias Data access (CRUD) Developers knowledge  Database languages (SQL, DDL)
Can we stop here?  I just need to query data for my (web) application. I could use the  “industry standard”, right?
Yeah, right JDO 1.0, 2.0, 2.1 ? EJB 2 (Ieek!) or 3 ? JPA ? J2SE ? J2EE ? And wait, there is more… …  Legacy code? Optimized SQL? …  Transparent or explicit persistence?
Meanwhile, outside Apache… Hibernate „ de facto standard“ (L)GPL licensed driven by a single company TopLink Essentials JSR 220 Reference Implementation CDDL + GPLv2 driven by a single company
Ok, ok, ok… So, why Apache?
Because we are at ApacheCon…
Apache Software License V2 Open Source Commercial friendly Non discriminatory
Strong community Many contributors Meritocracy Commercial support available
Apache Persistence Layers Apache Cayenne Apache OpenJPA Apache iBatis not in this talk: Apache Torque (http://db.apache.org/torque/) Apache OJB (http://db.apache.org/ojb/)
Common Ground JDBC, JTA, JNDI Many popular DBs supported: MySQL, PostgreSQL, Oracle, HSQLDB, Apache Derby XML mapping definition files 1:1, 1:n, m:n mappings native and generated primary keys
Where are we? Apache Cayenne 2.0.4 (Oct 12th, 2007) 3.0M3 Apache OpenJPA 1.0.2 (Feb 18th, 2008) 1.1.0-SNAPSHOT Apache iBatis 2.3.1 Beta (Mar 25th, 2008) 3.0 in planning state
Swing GUI tool for modeling Ant support, maven through ant tasks concepts related to WebObjects EOF
Cayenne Pros: GUI modeler included Good documentation Cons: all data objects inherit  DataObject (3.0 will have POJO support) no standards compliant API (3.0 will be JPA compliant)
implements JPA (JSR-220) Ant support, maven through ant tasks Command line tools included based on Kodo, donated by BEA
Pros: Standards based (JPA) POJO support Good documentation Cons: Some learning effort required Only command line tools included
Example code This talk can only scratch the concepts Example code is available from my homepage, along with examples for other O/R tools: http://henning.schmiedehausen.org/or-mappers/ http://svn.softwareforge.de/svn/opensource/talks/or-mappers/
A sample relation
Cayenne property class People extends CayenneDataObject { void setFirstName(String  firstName ) {  writeProperty ( "firstName" ,  firstName ); } String getFirstName() {  return (String)  readProperty ( "firstName" ); }
Cayenne relation class People extends CayenneDataObject { void addToContacts(Contact  contact ) {  addToManyTarget ( "contacts" ,  contact , true); } void removeFromContacts(Contact  contact ) {  removeToManyTarget ( "contacts" ,  contact , true);  } List getContacts() { return (List)  readProperty ( "contacts" ); }
Cayenne mapping <obj-entity name=&quot;People&quot;  className=&quot; om.People &quot; dbEntityName=&quot; people &quot;> <obj-attribute name=&quot; firstName &quot; type=&quot;java.lang.String&quot; db-attribute-path=&quot; people_firstname &quot;/> </obj-entity> <obj-relationship name=&quot;people&quot; source=&quot; Contact &quot; target=&quot; People &quot; db-relationship-path=&quot;people&quot;/> Class/DB Map Prop. / Col Map Obj Relation
OpenJPA property @Entity @Table(name=&quot;people&quot;) public class People { private String  firstName ; @Basic @Column(name=&quot;people_firstname&quot;) public String getFirstName() { return  firstName ; } public void setFirstName(String firstName) { this. firstName  =  firstName; } Class/DB Map Prop. / Col Map
OpenJPA relation @Entity @Table(name=&quot;people&quot;) public class People { private Collection<Contact>  contacts ; @OneToMany(mappedBy = &quot;people&quot;, cascade={CascadeType.PERSIST, CascadeType.REMOVE}) public Collection<Contact> getContacts() { return  contacts ; } public void setContacts(   Collection<Contact> contacts) { this. contacts  = contacts; } Class/DB Map Obj Relation
Accessing the Mapper Cayenne: DataContext  dataContext  = DataContext.createDataContext(); OpenJPA: EntityManagerFactory  entityManagerFactory  = Persistence.createEntityManagerFactory(); EntityManager  em  =  entityManagerFactory .createEntityManager();
Retrieving an Object by PK Cayenne: People user = (People) DataObjectUtils  .objectForPK( dataContext , People.class, 2); OpenJPA: People user =   (People)  em .find(People.class, 2L);
Changing an Object Cayenne: People people = retrieve();  people.setMember(true); dataContext. commitChanges() ; OpenJPA: Transaction  tx  =  em .getTransaction(); tx.begin() ; People people = retrieve();  people.setMember(true); tx.commit() ;
And Now… …for Something Completely Different
iBATIS Data mapper framework couples SQL queries to Java objects Ant support, maven through ant tasks Abator tool / Eclipse plugin
iBATIS Pro: fast, lightweight, unintrusive Other Languages: Ruby, .NET POJO support Eclipse plugin Cons: SQL knowledge required „ not mainstream“ concept
A mapped query <select id=&quot; getPeople &quot;  parameterClass=&quot;people&quot;  resultMap=&quot;peopleResult&quot; > select * from people <dynamic prepend=&quot;where&quot;> <isNotNull prepend=&quot;and&quot; property=&quot;id&quot;> people_id = #id# </isNotNull> </dynamic> </select>
Query examples Querying a single object People  select = new   People (); select.setId(2L); People user = (People)   sqlMap  .queryForObject(&quot; getPeople &quot;, select); Querying a list List select =  sqlMap  .queryForList(&quot; getPeople &quot;, null);
Caveat iBatis is not an O/R mapper, it is a data mapper!  calling  retrieve()  twice returns: Cayenne, OpenJPA: The same object iBatis: Two different objects
Which one to use? This table is highly subjective! YMMV! …  when standards compliance is a concern OpenJPA … if you need J2EE integration All of them … if your SQL is better than your Java / .NET iBATIS … if your Java is better than your SQL Cayenne, OpenJPA When What
Where to go from here? http://henning.schmiedehausen.org/or-mappers/ Talk slides and Example code O/R Mappers Homepages: http://cayenne.apache.org/ http://openjpa.apache.org/ http://ibatis.apache.org/ Other ASF persistence mappers: http://db.apache.org/torque / http://db.apache.org/ojb /
?
Thanks for your attention!

More Related Content

PPT
Basic Hibernate Final
PPT
Intro To Hibernate
ODP
2008.07.17 발표
PPT
Boston Computing Review - Java Server Pages
PPT
Introduction to hibernate
PPT
Hibernate Tutorial
PDF
JPA and Hibernate
PDF
Web Development with Smalltalk
Basic Hibernate Final
Intro To Hibernate
2008.07.17 발표
Boston Computing Review - Java Server Pages
Introduction to hibernate
Hibernate Tutorial
JPA and Hibernate
Web Development with Smalltalk

What's hot (20)

PPT
JSP Custom Tags
ODP
JavaEE Spring Seam
PDF
Javascript Best Practices
PDF
Metaprogramming with javascript
PPT
Spring overview
PPT
JavaScript Workshop
PPT
X Path
PPTX
Ot performance webinar
PPT
PDF Localization
ODP
JavaScript and jQuery Fundamentals
PDF
Introduction to JPA and Hibernate including examples
PPT
Rich faces
PPT
Client Side Technologies
PDF
Statistical Element Locator by Oren Rubin - SeleniumConf UK 2016
PDF
Introduction to Prolog (PROramming in LOGic)
PDF
Java Training in Chennai | Advanced Java Training in chennai | J2EE Training ...
PDF
Class notes(week 2) on basic concepts of oop-2
PPT
Chromattic usage in eXo Social
PPT
sMash at May NYPHP UG
PPT
Implementing the Genetic Algorithm in XSLT: PoC
JSP Custom Tags
JavaEE Spring Seam
Javascript Best Practices
Metaprogramming with javascript
Spring overview
JavaScript Workshop
X Path
Ot performance webinar
PDF Localization
JavaScript and jQuery Fundamentals
Introduction to JPA and Hibernate including examples
Rich faces
Client Side Technologies
Statistical Element Locator by Oren Rubin - SeleniumConf UK 2016
Introduction to Prolog (PROramming in LOGic)
Java Training in Chennai | Advanced Java Training in chennai | J2EE Training ...
Class notes(week 2) on basic concepts of oop-2
Chromattic usage in eXo Social
sMash at May NYPHP UG
Implementing the Genetic Algorithm in XSLT: PoC
Ad

Similar to Apache Persistence Layers (20)

PDF
Apache Cayenne for WO Devs
PPTX
Apache Cayenne: a Java ORM Alternative
PDF
Spring Boot Tutorial Part 2 (JPA&Hibernate) .pdf
PDF
Data access
KEY
Object Relational Mapping in PHP
PPT
Introduction to Object-Relational Mapping
PPT
PDF
Java e i database: da JDBC a JPA
PPT
ORM Concepts and JPA 2.0 Specifications
PDF
Free Hibernate Tutorial | VirtualNuggets
PPT
YDP_API&MS_UNIT_hiii detail notes to understand api.ppt
PPT
YDP_API&MS_UNIT_IIIii8iiiiiiiii8iiii.ppt
PDF
Java persistence api 2.1
PDF
Java Persistence API
ODP
Working with jpa
PDF
Evolution of database access technologies in Java-based software projects
DOCX
Object relationship mapping and hibernate
PDF
Apache Con Us2007 Apachei Batis
 
PDF
Oracle Code Roma: NoSQL + SQL = MySQL
PPTX
Module-3 for career and JFSD ppt for study.pptx
Apache Cayenne for WO Devs
Apache Cayenne: a Java ORM Alternative
Spring Boot Tutorial Part 2 (JPA&Hibernate) .pdf
Data access
Object Relational Mapping in PHP
Introduction to Object-Relational Mapping
Java e i database: da JDBC a JPA
ORM Concepts and JPA 2.0 Specifications
Free Hibernate Tutorial | VirtualNuggets
YDP_API&MS_UNIT_hiii detail notes to understand api.ppt
YDP_API&MS_UNIT_IIIii8iiiiiiiii8iiii.ppt
Java persistence api 2.1
Java Persistence API
Working with jpa
Evolution of database access technologies in Java-based software projects
Object relationship mapping and hibernate
Apache Con Us2007 Apachei Batis
 
Oracle Code Roma: NoSQL + SQL = MySQL
Module-3 for career and JFSD ppt for study.pptx
Ad

Recently uploaded (20)

PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Empathic Computing: Creating Shared Understanding
PPTX
Big Data Technologies - Introduction.pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Encapsulation theory and applications.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
20250228 LYD VKU AI Blended-Learning.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Empathic Computing: Creating Shared Understanding
Big Data Technologies - Introduction.pptx
Network Security Unit 5.pdf for BCA BBA.
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Electronic commerce courselecture one. Pdf
Encapsulation theory and applications.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
Digital-Transformation-Roadmap-for-Companies.pptx
Encapsulation_ Review paper, used for researhc scholars
Review of recent advances in non-invasive hemoglobin estimation
Mobile App Security Testing_ A Comprehensive Guide.pdf
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows

Apache Persistence Layers

  • 1. Cayenne, OpenJPA, iBatis Apache Persistence Layers ApacheCon EU 2008 Henning Schmiedehausen [email_address]
  • 2. The O/R impedance mismatch Objects (Java Knowledge) RDBMS ?
  • 3. In a nutshell… “ Object-Relational mapping (O/RM), is a programming technique that links databases to object-oriented language concepts, creating (in effect) a ‘virtual object database’.” – Wikipedia
  • 4. Selection criterias Data access (CRUD) Developers knowledge Database languages (SQL, DDL)
  • 5. Can we stop here? I just need to query data for my (web) application. I could use the “industry standard”, right?
  • 6. Yeah, right JDO 1.0, 2.0, 2.1 ? EJB 2 (Ieek!) or 3 ? JPA ? J2SE ? J2EE ? And wait, there is more… … Legacy code? Optimized SQL? … Transparent or explicit persistence?
  • 7. Meanwhile, outside Apache… Hibernate „ de facto standard“ (L)GPL licensed driven by a single company TopLink Essentials JSR 220 Reference Implementation CDDL + GPLv2 driven by a single company
  • 8. Ok, ok, ok… So, why Apache?
  • 9. Because we are at ApacheCon…
  • 10. Apache Software License V2 Open Source Commercial friendly Non discriminatory
  • 11. Strong community Many contributors Meritocracy Commercial support available
  • 12. Apache Persistence Layers Apache Cayenne Apache OpenJPA Apache iBatis not in this talk: Apache Torque (http://db.apache.org/torque/) Apache OJB (http://db.apache.org/ojb/)
  • 13. Common Ground JDBC, JTA, JNDI Many popular DBs supported: MySQL, PostgreSQL, Oracle, HSQLDB, Apache Derby XML mapping definition files 1:1, 1:n, m:n mappings native and generated primary keys
  • 14. Where are we? Apache Cayenne 2.0.4 (Oct 12th, 2007) 3.0M3 Apache OpenJPA 1.0.2 (Feb 18th, 2008) 1.1.0-SNAPSHOT Apache iBatis 2.3.1 Beta (Mar 25th, 2008) 3.0 in planning state
  • 15. Swing GUI tool for modeling Ant support, maven through ant tasks concepts related to WebObjects EOF
  • 16. Cayenne Pros: GUI modeler included Good documentation Cons: all data objects inherit DataObject (3.0 will have POJO support) no standards compliant API (3.0 will be JPA compliant)
  • 17. implements JPA (JSR-220) Ant support, maven through ant tasks Command line tools included based on Kodo, donated by BEA
  • 18. Pros: Standards based (JPA) POJO support Good documentation Cons: Some learning effort required Only command line tools included
  • 19. Example code This talk can only scratch the concepts Example code is available from my homepage, along with examples for other O/R tools: http://henning.schmiedehausen.org/or-mappers/ http://svn.softwareforge.de/svn/opensource/talks/or-mappers/
  • 21. Cayenne property class People extends CayenneDataObject { void setFirstName(String firstName ) { writeProperty ( &quot;firstName&quot; , firstName ); } String getFirstName() { return (String) readProperty ( &quot;firstName&quot; ); }
  • 22. Cayenne relation class People extends CayenneDataObject { void addToContacts(Contact contact ) { addToManyTarget ( &quot;contacts&quot; , contact , true); } void removeFromContacts(Contact contact ) { removeToManyTarget ( &quot;contacts&quot; , contact , true); } List getContacts() { return (List) readProperty ( &quot;contacts&quot; ); }
  • 23. Cayenne mapping <obj-entity name=&quot;People&quot; className=&quot; om.People &quot; dbEntityName=&quot; people &quot;> <obj-attribute name=&quot; firstName &quot; type=&quot;java.lang.String&quot; db-attribute-path=&quot; people_firstname &quot;/> </obj-entity> <obj-relationship name=&quot;people&quot; source=&quot; Contact &quot; target=&quot; People &quot; db-relationship-path=&quot;people&quot;/> Class/DB Map Prop. / Col Map Obj Relation
  • 24. OpenJPA property @Entity @Table(name=&quot;people&quot;) public class People { private String firstName ; @Basic @Column(name=&quot;people_firstname&quot;) public String getFirstName() { return firstName ; } public void setFirstName(String firstName) { this. firstName = firstName; } Class/DB Map Prop. / Col Map
  • 25. OpenJPA relation @Entity @Table(name=&quot;people&quot;) public class People { private Collection<Contact> contacts ; @OneToMany(mappedBy = &quot;people&quot;, cascade={CascadeType.PERSIST, CascadeType.REMOVE}) public Collection<Contact> getContacts() { return contacts ; } public void setContacts( Collection<Contact> contacts) { this. contacts = contacts; } Class/DB Map Obj Relation
  • 26. Accessing the Mapper Cayenne: DataContext dataContext = DataContext.createDataContext(); OpenJPA: EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(); EntityManager em = entityManagerFactory .createEntityManager();
  • 27. Retrieving an Object by PK Cayenne: People user = (People) DataObjectUtils .objectForPK( dataContext , People.class, 2); OpenJPA: People user = (People) em .find(People.class, 2L);
  • 28. Changing an Object Cayenne: People people = retrieve(); people.setMember(true); dataContext. commitChanges() ; OpenJPA: Transaction tx = em .getTransaction(); tx.begin() ; People people = retrieve(); people.setMember(true); tx.commit() ;
  • 29. And Now… …for Something Completely Different
  • 30. iBATIS Data mapper framework couples SQL queries to Java objects Ant support, maven through ant tasks Abator tool / Eclipse plugin
  • 31. iBATIS Pro: fast, lightweight, unintrusive Other Languages: Ruby, .NET POJO support Eclipse plugin Cons: SQL knowledge required „ not mainstream“ concept
  • 32. A mapped query <select id=&quot; getPeople &quot; parameterClass=&quot;people&quot; resultMap=&quot;peopleResult&quot; > select * from people <dynamic prepend=&quot;where&quot;> <isNotNull prepend=&quot;and&quot; property=&quot;id&quot;> people_id = #id# </isNotNull> </dynamic> </select>
  • 33. Query examples Querying a single object People select = new People (); select.setId(2L); People user = (People) sqlMap .queryForObject(&quot; getPeople &quot;, select); Querying a list List select = sqlMap .queryForList(&quot; getPeople &quot;, null);
  • 34. Caveat iBatis is not an O/R mapper, it is a data mapper! calling retrieve() twice returns: Cayenne, OpenJPA: The same object iBatis: Two different objects
  • 35. Which one to use? This table is highly subjective! YMMV! … when standards compliance is a concern OpenJPA … if you need J2EE integration All of them … if your SQL is better than your Java / .NET iBATIS … if your Java is better than your SQL Cayenne, OpenJPA When What
  • 36. Where to go from here? http://henning.schmiedehausen.org/or-mappers/ Talk slides and Example code O/R Mappers Homepages: http://cayenne.apache.org/ http://openjpa.apache.org/ http://ibatis.apache.org/ Other ASF persistence mappers: http://db.apache.org/torque / http://db.apache.org/ojb /
  • 37. ?
  • 38. Thanks for your attention!