Home >> Spring Framework
using SpringFramework Hibernate DAO Support:
Hiberate DAO Support provides an abstraction over usage of
Session, Transaction etc.
In order to use HibernateDASupport, application DAO class
file may extend HibernateDAOSupport, and by setting SessionFactory
to this class by using setSessionFactory API, as shown below:
HibernateDAOSupport provided method such as getter and Setter
for the HibernateTemplate. HibernateTemplate provides many more
methods and it can abstract Session and Transaction related coding.
This example show a way of using HibernateDAOSupport and HibernateTemplate
(disclaimer: this example cannot replace careful evaluation of existing
requirement in hand, so this is a dummy implementation or example).
In this example I have used following softwares:
1. SpringFramework 1.2.8
2. Hiberate 3.2
3. Java 5.0
4. Eclipse 3.2
5. MySQL 5.0
6. MySQL JDBC driver.
|
|  |
|
This example has a client code and a configuration file with tags for
creating JDBC datasource, SessionFactory, DAO etc.
Client calls->Sample Business calls->Sample DAO calls->HibernateTemplate
related save method to persist User object to database and create
a single record in database.
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="myDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="test"/>
<property name="password" value="test"/>
</bean>
<bean id="mySessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources">
<list>
<value>config/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQL5InnoDBDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.transaction.factory_class">
org.hibernate.transaction.JDBCTransactionFactory
</prop>
</props>
</property>
</bean>
<bean id="sampledao" class="sample.SampleDAO">
<property name="sessionFactory" ref="mySessionFactory"/>
</bean>
</beans>
|
Three separate bean tags are for creating datasource, session factory
and sample DAO beans in the Spring application context.
Corresponding Hibernate configuration file as shown below:
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="sample">
<class name="User" table="User" lazy="true">
<id name="id" access="property"/>
<property name="name" access="property"/>
</class>
</hibernate-mapping>
|
Class diagram of this example is as follows:

And all those dependent jar files I required, those are to be included
in the class path of Eclipse IDE as as follows:

Let me share all the Java files / code from the above class diagram
as follows:
User.java
package sample;
public class User {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
|
Client.java
package sample.test;
import sample.SampleBusiness;
import sample.User;
public class Client {
public Client() {
User user = new User();
user.setId("a001");
user.setName("sample user name");
System.out.println(new SampleBusiness().createUser(user));
System.out.println(new SampleBusiness().createUser(user1));
}
public static void main(String[] args) {
new Client();
}
}
|
SampleBusiness.java
package sample;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SampleBusiness {
static ClassPathXmlApplicationContext clsAppContext;
static {
System.out.println("about create application context");
clsAppContext = new
ClassPathXmlApplicationContext("config/applicationContext.xml");
}
public String createUser(User user) {
return getDao().createUser(user);
}
public DAO getDao() {
return (DAO) clsAppContext.getBean("sampledao");
}
}
|
DAO.java
package sample;
import org.springframework.dao.DataAccessException;
public interface DAO {
public String createUser(User user) throws DataAccessException;
}
|
SampleDAO.java
package sample;
import org.springframework.dao.DataAccessException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public class SampleDAO extends HibernateDaoSupport implements DAO{
public String createUser(User user) throws DataAccessException {
String userId = null;
userId = (String) getHibernateTemplate().save(user);
return userId;
}
}
|
As you might have noticed that, Sample DAO class is using getHibernateTemplate
method of HibernateDAOSupport class, so as to be able to abstract Hibernate
Session and Transaction related coding (like begin and commit/rollback related
coding). As you might noticed that Hibernate Flush and transaction commit
operations are not present, still on execution of this createUser method,
one record will be inserted into corresponding database table User.
If you like to share your comment/suggestions/feedback relating to this Page,
you can do so by droping us an email at
usingframeworks @ gmail . com
with the subject line mentioning URL for this Page (i.e,
/spring-hibernate-dao-example.php) or use this
LINK.
As per this website's privacy policy, we never disclose your email id,
though we shall post your comments/suggestions/feedback with
your name (optional) and date on this Page. If you don't want your
comments/suggestions/feedback to be shared in this Page, please
mention so in your email to us. Thank you very much.....
If anything missed out , please let me know at
techienjoy at yahoo . com