Agenda
• What is Hibernate– Overview– Benefits– Example
• Spring Integration– Benefits– Example
• Questions
What is Hibernate?
• Popular Open Source Object/Relational Mapping (ORM) tool
• Transparent persistence for POJOs (Plain Old Java Objects)
Object/Relational Mapping
JavaObjectint 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)
Other ORM Solutions
• “Open”– iBatis SQL Maps– JDO– JPA
• Commercial– TopLink
Why Hibernate?
• Retains natural object model (transparent)• Minimizes Code• Does not require a container• Model is not tied to persistance
implementation
Hibernate's Goal
• Remove 95% of common data persistence problems
Person.java
Name.java
person.hbm.xml person table
Hibernate Component MappingExample
Cat.java
cat.hbm.xml
cats table
Hibernate Collection Mappingwith recursion and subclassing
How do you use it?
• Act on your data model• Query in SQL and/or HQL• ... or using your object model
Auction Object Model
Persistant Class
• Default Constructor• Getters/Setters• Collections use
interface types• Identifier property
public class AuctionItem {private Long _id;private Set _bids;private Bid _successfulBidprivate 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;}…
}
XML Mapping
• Readable metadata
• Column/Table map
• Key Generation• Collections• Fetching
Strategies
<class name=“AuctionItem” table=“AUCTION_ITEM”>
<id name=“id” column=“ITEM_ID”>
<generator class=“native”/>
</id>
<property name=“description” column=“DESCR”/>
<many-to-one name=“successfulBid”column=“SUCCESSFUL_BID_ID”/>
<set name=“bids”
cascade=“all”
lazy=“true”>
<key column=“ITEM_ID”/>
<one-to-many class=“Bid”/>
</set>
</class>
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
Working with DataRetrieve 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();
Hibernate in codeRetrieve 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();
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();
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
Integrating Spring and Hibernate
Spring and Hibernate
• Benefits• Examples
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
Spring IoC
Session
POJO
DAO
setSession()
save()
Spring Interceptors (AOP)
Business Logic
getCatById()
save(Cat)
DAOInterceptor
Session
Spring Framework
Spring’s 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);
}
Top Related