An Introduction to Hibernate Matt Secoske [email protected]

Embed Size (px)

Citation preview

  • Slide 1
  • An Introduction to Hibernate Matt Secoske [email protected]
  • Slide 2
  • Agenda What is Hibernate Overview Benefits Example Spring Integration Benefits Example Questions
  • Slide 3
  • What is Hibernate? Popular Open Source (LGPL) Object/Relational Mapping (ORM) tool Transparent persistence for POJOs (Plain Old Java Objects) Core of JBoss CMP 2.0 impl.
  • Slide 4
  • Object/Relational Mapping JavaObject int id; String name; String getName() int getId() void setName(String) void setId(int) SQL Table id [int] primary key, name [varchar(50)] Magic Happens Here (O/R Mapper i.e. Hibernate)
  • Slide 5
  • Other ORM Solutions Open iBatis SQL Maps JDO Commercial TopLink
  • Slide 6
  • Why Hibernate? Retains natural object model (transparent) Minimizes Code Does not require a container Model is not tied to persistance implementation
  • Slide 7
  • Hibernate's Goal Remove 95% of common data persistence problems
  • Slide 8
  • Slide 9
  • Slide 10
  • How do you use it? Act on your data model Query in SQL and/or HQL... or using your object model
  • Slide 11
  • Auction Object Model
  • Slide 12
  • Persistant Class Default Constructor Getters/Setters Collections use interface types Identifier property public class AuctionItem { private Long _id; private Set _bids; private Bid _successfulBid private String _description; public Long getId() { return _id; } private void setId(Long id) { _id = id; } public String getDescription() { return _description; } public void setDescription(String desc) { _description=desc; } }
  • Slide 13
  • XML Mapping Readable metadata Column/Table map Key Generation Collections Fetching Strategies
  • Slide 14
  • Working with Data Session session = sessionFactory.openSession(); Transaction tx = s.beginTransaction(); AuctionItem item = (AuctionItem) session.get(ActionItem.class, itemId); item.setDescription(newDescription); tx.commit(); session.close(); Retrieve an AuctionItem and change description
  • Slide 15
  • Working with Data Retrieve an AuctionItem and create a new persistent Bid Bid bid = new Bid(); bid.setAmount(bidAmount); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); AuctionItem item = (AuctionItem) session.get(ActionItem.class, itemId); bid.setItem(item); item.getBids().add(bid); tx.commit(); session.close();
  • Slide 16
  • Hibernate in code Retrieve an AuctionItem and create a new persistent Bid Bid bid = new Bid(); bid.setAmount(bidAmount); Session session = sf.openSession(); Transaction tx = session.beginTransaction(); AuctionItem item = (AuctionItem) session.get(ActionItem.class, itemId); bid.setItem(item); item.getBids().add(bid); tx.commit(); session.close();
  • Slide 17
  • Hibernate in code Retrieve an AuctionItem and create a new persistent Bid Session session = sf.openSession(); Transaction tx = session.beginTransaction(); AuctionItem item = (AuctionItem) session.get(ActionItem.class, itemId); tx.commit(); session.close(); item.setDescription(newDescription); Session session2 = sf.openSession(); Transaction tx = session2.beginTransaction(); session2.update(item); tx.commit(); session2.close();
  • Slide 18
  • Benefits Metadata controlled persistence Transparent - working with the model, not the data access technology Pooling, Caching, Transactions can all be handled outside of our code
  • Slide 19
  • Integrating Spring and Hibernate
  • Slide 20
  • Spring and Hibernate Benefits Examples
  • Slide 21
  • Benefits Resource Management IoC / AOP Session Management Extended Transaction Support JTA and/or JDBC Flexible Transaction Demarcation Programmatic Declarative (Spring's XML config) HibernateTemplate Simplifies Hibernate API
  • Slide 22
  • Spring IoC Session POJO DAO setSession() save()
  • Slide 23
  • Spring Interceptors (AOP) Business Logic getCatById() save(Cat) DAOInterceptor Session Spring Framework
  • Slide 24
  • Springs HibernateTemplate Hibernate Only: HibernateTemplate: public User getUserByEmailAddress(final String email) { try { Session session = sessionFactory.openSession(); List list = session.find( "from User user where user.email=?", email, Hibernate.STRING); return (User) list.get(0); } finally { session.close(); } } public User getUserByEmailAddress(final String email) { List list = getHibernateTemplate().find( "from User user where user.email=?", email, Hibernate.STRING); return (User) list.get(0); }
  • Slide 25
  • News of the day (12/20/2004) Hibernate 3.0 Beta 1 released! Features: Virtualization (Filters, Permissions, etc) New mapping constructs HQL rewrite using ANTLR Representation Independence i.e.HashMap Statistics and JMX Monitoring Stored Procedures / Handwritten SQL Much more
  • Slide 26
  • Important Links http://www.hibernate.org http://www.hibernate.org http://www.springframework.org http://www.springframework.org Parts of this presentation come from documentation and presentations on the hibernate.org website: http://www.hibernate.org/hib_docs/reference/en/pdf/hibernate_reference.pdfhttp://www.hibernate.org/hib_docs/reference/en/pdf/hibernate_reference.pdf - Manual http://www.hibernate.org/hib_docs/online/jaoo_presentation/HibernateJAOO.ppthttp://www.hibernate.org/hib_docs/online/jaoo_presentation/HibernateJAOO.ppt - Presentation by Gavin King http://www.hibernate.org/200.htmlhttp://www.hibernate.org/200.html - Road Map Books: J2EE Development without EJB Rod Johnson and Juergen Hoeller Better, Faster, Lighter Java Bruce A. Tate and Justin Gehtland Hibernate in Action Christian Bauer and Gavin King
  • Slide 27
  • Questions ???