i am going to give you complete example of struts 2.0.11 and hibernate 3 integration
well let me start from eclipse configuration,i am using eclipse 3.3 for development,it is nice and stable
step1- create Dynamic web project in eclipse .
step2- now i am going to give configuration of struts 2.0.11 in project open web.xml
and add struts filter for applying struts 2 ,write this in web.xml in
<filter>Another thing you have to do is to put (create) struts.xml file in src folder of eclipse
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
and put required library for struts (common-logging.jar,freemarker.jar,ognl.jar,struts2-
core.jar, xwork.jar)
This is basic configuration for struts 2
Step-3 now it is time to configure hibernate with struts for that we required hibernate and its required
Libraries in web-Inf/lib folder, complete list:
antlr.jar, asm.jar, cglib.jar, commons-beanutils.jar, common-logging.jar, dom4j.jar
freemarker.jar, hibernate.jar, jta.jar, <jdbc drivers libs>, ognl.jar, struts2.jar, xwork.jar
Step4-we have to create session factory of hibernate in struts 2 filter, so we will extend struts 2 filter,
Create class in src folder for create plugin of hibernate
In your own package structure, I have create HibernateUtil.java in org.hns.plugin
HibernateUtil.java
package org.hns.plugin;Struts2dispatcher.java
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Session;
public class HibernateUtil {
private static SessionFactory sessionFactory;
public static void createSessionFactory() {
sessionFactory = new Configuration().configure().buildSessionFactory();
}
public static Session getSession() {
return sessionFactory.openSession();
}
}
package org.hns.plugin;
import javax.servlet.*;
import org.apache.struts2.dispatcher.FilterDispatcher;
import org.hibernate.HibernateException;
public class Struts2Dispatcher extends FilterDispatcher {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
super.init(filterConfig);
try {
HibernateUtil.createSessionFactory();
System.out.print("application initializing successfully");
} catch (HibernateException e) {
throw new ServletException(e);
}
}
}
Step-5
package org.hns.plugin;Step-6 - apply this filter in web.xml like
import javax.servlet.*;
import org.apache.struts2.dispatcher.FilterDispatcher;
import org.hibernate.HibernateException;
public class Struts2Dispatcher extends FilterDispatcher {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
super.init(filterConfig);
try {
HibernateUtil.createSessionFactory();
System.out.print("application initializing successfully");
} catch (HibernateException e) {
throw new ServletException(e);
}
}
}
<!--<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> -->
<filter-class>org.hns.plugin.Struts2Dispatcher</filter-class>
Step-7 we have to put hibernate configuration file in src folder with the name hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>Give your connection url, username, password, jdbc driver class name, for this example I have used mysql database
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property>true</property>
<property name="connection.characterEncoding">UTF-8</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/user</property>
<property>usr</property>
<property>usr</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="current_session_context_class">thread</property>
<property>org.hibernate.transaction.JDBCTransactionFactory</property>
</session-factory>
</hibernate-configuration>
I have used user schema with usr username and password, in user schema there is usermast table with the field usercode(int),uname(varchar),pwd(varchar),type(varchar), you can create table and put 2-3 dummy entry in your wishing database.
Step-8
It is time to create hibernate mapping with table and mapping class
I have create User.java in org.hns.user package
package org.hns.user.;Create User.hbm.xml in org.hns.user (org/hns/user/ OR where User.java created) like
public class User
{
private int id;
private String username;
private String password;
private String usertype;
// add fields setter and getter here (required)
}
<!DOCTYPE hibernate-mapping PUBLICYou can get more idea about any another advance mapping stuff from any hibernate tutorial.
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class table="usermast">
<id column="usercode">
<generator></generator>
</id>
<property name="username" column="uname" />
<property column="pwd" />
<property column="type" />
</class>
</hibernate-mapping>
Here property is java class variable name and column is table column name.
Step-9 add this mapping to hibernate.cfg.xml using
<mapping resource="org/hns/user/User.hbm.xml"/>Step-10 the basic settings for using hibernate for usermast table has been completed here.
Step-11
now I am create another java file UserHibDao.java in org.hns.user.dao for create and access user dao
package org.hns.user.dao;So after this stuff you can either use this class for creating service layer of dao or you can use this class functions directly for set business logic.
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hns.user.User;
import org.sm.plugin.HibernateUtil;
public class UserHibDao {
private List<User> userlist;
private User user;
public void delete(Integer id) {
Session session = HibernateUtil.getSession();
Transaction tx = null;
try
{
tx = session.beginTransaction();
user=(User)session.get(User.class,id);
session.delete(user);
tx.commit();
}catch (RuntimeException e) {
if(tx != null) tx.rollback();
throw e;
} finally {
session.close();
}
}
public List getAllUser() {
Session session = HibernateUtil.getSession();
try
{
session.beginTransaction();
userlist=session.createQuery("from User").list();
return userlist;
}
catch(Exception e)
{
System.out.print("Error while fetching "+e);
return null;
}
finally
{
session.close();
}
}
public User getuser(Integer id) {
Session session = HibernateUtil.getSession();
try {
session.beginTransaction();
//change query for get proper data
Query q = session.createQuery("from User u where u.uid=:id");
q.setInteger("userid",id);
return (User) q.uniqueResult();
}finally {
session.close();
}
}
public void insert(User usr) {
Session session = HibernateUtil.getSession();
Transaction tx=null;
try {
tx = session.beginTransaction();
session.save(usr);
tx.commit();
} catch (RuntimeException e) {
if(tx != null) tx.rollback();
throw e;
} finally {
session.close();
}
}
public void update(User usr) {
Session session = HibernateUtil.getSession();
Transaction tx = null;
try {
tx=session.beginTransaction();
session.update(usr);
tx.commit();
}catch (RuntimeException e) {
if(tx != null) tx.rollback();
throw e;
} finally {
session.close();
}
}
}
here one thing should be noted that hibernate query fire on its class object not directly on table so i have used
somthing like this session.createQuery("from User u where u.uid=:id"); instead of using session.createQuery("from usermast u where u.uid=:id");[tablename query]
hope this is enough to start with struts 2 and hibernate 3 ,if you feel still there is some stuff missing in this blog ,let me know from comment
Thanks :-)))
No comments:
Post a Comment