Struts 2 Hibernate Integration Example [ Struts 2 + Hibernate Integration

Let us see how to integrate struts 2 application with Hibernate, a real time application. Make sure you are well aware of the following topics before you read this article.

  • Static – Core
  • HQL – Hibernate
  • Taking separate bean to store the values – Struts

See HibernatePlug.java,  my aim is to make SessionFactory as singleton.  As a programmer its our responsibulity to make SessionFactory as singleton,  People used to say HibernatePlugin plugin plugin bla bla., but all it could be is to make SessionFactory as singleton, and remaining is just struts only ?

Directory Structure

HibernatePlug.java

12345678910111213141516171819202122232425262728293031package java4s;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernatePlug{    

private static SessionFactory factory = getSessionFactory();

public static synchronized SessionFactory getSessionFactory() { try { Configuration cfg = new Configuration();

cfg.configure("hibernate.cfg.xml");

SessionFactory sessionFactory = cfg.buildSessionFactory(); System.out.println(" ---------- Factory Object Created ------------"); return sessionFactory; } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getFactory() {

return factory;

} }

index.jsp

12<%@ taglib prefix="s" uri="/struts-tags" %>
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=verify.action">

retrive.jsp

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374<%@taglib uri="/struts-tags" prefix="s"%>
<%@ page import="java.util.*,java4s.Mybean" %>
<% Mybean b; %>

<head>
<link rel="stylesheet" type="text/css" href="css/java4s.css" />
<script type="text/javascript">
function deleteRecord()
    {
        document.fom.action="delete.action";
        document.fom.submit();
    }
function insertRecord()
{
    document.fom.action="insertLink.action";
    document.fom.submit();
}
function editr(val)
{
   document.fom.action="update.action?fid="+val;
   document.fom.submit();
}
</script>

</head>

<form method="post" name="fom">

<table>
<tr><td colspan="5">

<font face="verdana" size="2">
<input type="button" value="insert" onclick="insertRecord()"> <input type="button" value="delete" onclick="deleteRecord()"> <br><br>

</font>

</td></tr>

<tr>
<td><center>+</center></td>
<td><b>SNO</b></td>
<td><b>SName</b></td>
<td><b>Country</b></td>
<td><b> Ope.</b></td>
</tr>

<%
List l=(List)request.getAttribute("rec");
if(l!=null)
{
    Iterator it=l.iterator();

    while(it.hasNext())
    {
        b=(java4s.Mybean)it.next();

%>
        <tr>
        <td><input type="checkbox" value="<%= b.getNo() %>" name="rdel"></td>
        <td><%= b.getNo() %></td>
        <td><%= b.getNam() %></td>
        <td><%= b.getCt() %></td>
        <td><a href="javascript:editr('<%= b.getNo() %>')">Edit</a></td>
        </tr>

<%         

    }
}

%> 

</table>
</form>

insertScreen.jsp

12345678910111213141516171819202122232425262728293031323334353637383940414243444546<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*;" %>

<html>

<head>
<link rel="stylesheet" type="text/css" href="css/java4s.css" />

<script type="text/javascript">
function display()
    {
        document.fom.action="verify.action";
        document.fom.submit();
    }
</script>

</head>

<body>

    <s:form action="insert" name="fom">     

<table>
<tr>
<td colspan="2">

<input type="button" value="Display Records" onclick="display()"> 

</td></tr>

<tr><td>

<s:textfield label="Number" name="b.no" cssClass="bord"/>

<s:textfield label="Name" name="b.nam" cssClass="bord"/>

<s:textfield label="Country" name="b.ct" cssClass="bord"/>

<s:submit value="Insert" /> </td> </tr> </table> </s:form> </body> </html>

successOperation.jsp

1234<%@ taglib prefix="s" uri="/struts-tags" %>

Executed successfully....!!!!!
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=verify.action">

edit.jsp

12345678910111213141516171819202122232425262728293031323334353637383940414243444546<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page import="java.util.*;" %>

<html>

<head>
<link rel="stylesheet" type="text/css" href="css/java4s.css" />

<script type="text/javascript">
function display()
    {
        document.fom.action="verify.action";
        document.fom.submit();
    }
</script>

</head>

<body>

<s:form action="updateRecInDB" method="post" name="fom">     

<table>
<tr>
<td colspan="2">

<input type="button" value="Display Records" onclick="display()"> 

</td></tr>

<tr><td>

<s:textfield label="Number" value="%{#application.x}" readonly="true" name="b.no" cssClass="bord"/>

<s:textfield label="Name" value="%{#application.y}" name="b.nam" cssClass="bord"/>

<s:textfield label="Country" value="%{#application.z}" name="b.ct" cssClass="bord"/>

<s:submit value="Update" /> </td> </tr> </table> </s:form> </body> </html>

error.jsp

1This is error page

Java4sController.java

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697package java4s;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.interceptor.ApplicationAware;
import org.apache.struts2.interceptor.ServletRequestAware;

import com.opensymphony.xwork2.ActionSupport;
public class Java4sController extends ActionSupport implements ServletRequestAware,ApplicationAware{
    private static final long serialVersionUID = 1L;

    MyOperations ma = new MyOperations();
    private List<Mybean> recordsFromDB;
    Mybean b;

    public Mybean getB() {
        return b;
    }
    public void setB(Mybean b) {
        this.b = b;
    }

    //For RequestAware Interface
    HttpServletRequest request;
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
    public HttpServletRequest getServletRequest() {
        return request;
    }    

    //For Bean, while selecting..
    public List<Mybean> getRecordsFromDB()
    {
          return this.recordsFromDB;
    }    

    // for ApplicationAware Interface
    Map m;
    public void setApplication(Map m)
    {
        this.m=m;
    }

    // *******     For select query  ********
    public String getRecords()
    {
        recordsFromDB = ma.retrieveRecords();
        request.setAttribute("rec", recordsFromDB);
        return SUCCESS;
    }

   //*********    For update query  ********
    public String getRecordToUpdate()
    {
        recordsFromDB = ma.retrieveRecord(request.getParameter("fid"));        

        Iterator<Mybean> it = recordsFromDB.iterator();
        while(it.hasNext())
        {
               Object o = it.next();
               b = (Mybean)o;
        }        

            m.put("x",b.getNo());
            m.put("y", b.getNam());
            m.put("z",b.getCt());

        return SUCCESS;
    }

    // ********     Insert method      *********
    public String insertRecord()
    {
        ma.insertRecord(b);
        return SUCCESS;
    }

    //**********    update in database  **********
    public String updateRec()
    {
        ma.upRecord(b);
        return SUCCESS;
    }

    public String deleteRecord()
    {
        String cv[] = null;
        cv=request.getParameterValues("rdel");
         ma.deleteRecord(cv);
        return SUCCESS;
    }

}

Links.java

12345678910111213package java4s;
public class Links{    

    public String insert()
    {
        return "insert";
    }
    public String display()
    {
        return "display";
    }

}

Mybean.java

123456789101112131415161718192021222324252627package java4s;
public class Mybean
{
    private int no;
    private String nam="";
    private String ct="";

    public int getNo() {
        return no;
    }
    public void setNo(int no) {
        this.no = no;
    }
    public String getNam() {
        return nam;
    }
    public void setNam(String nam) {
        this.nam = nam;
    }
    public String getCt() {
        return ct;
    }
    public void setCt(String ct) {
        this.ct = ct;
    }     

}

MyOperations.java

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758package java4s;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

public class MyOperations{    

    SessionFactory factory = HibernatePlug.getFactory();
    Session session = factory.openSession();
    Mybean p;
    List recList = null;

    public List retrieveRecords() {    

        recList = (List<Mybean>) session.createQuery("from Mybean b").list();
        System.out.println("got size"+recList.size());
        return recList;
    }

    public List retrieveRecord(String val) {
          recList = (List<Mybean>) session.createQuery("from Mybean b where b.no="+val).list();
            System.out.println("got size"+recList.size());
          return recList;
        }

    public void insertRecord(Mybean p) {
         Transaction tx = session.beginTransaction();
           session.save(p);
           System.out.println("Object saved successfully.....!!");
         tx.commit();
    }

    public void upRecord(Mybean p) {
         Transaction tx = session.beginTransaction();
            Query qry = session.createQuery("update Mybean b set b.nam=?, b.ct=? where b.no="+p.getNo());
            qry.setParameter(0,p.getNam());
            qry.setParameter(1,p.getCt());
            qry.executeUpdate();
            System.out.println("Object updated successfully...");
         tx.commit();
    }

    public void deleteRecord(String cv[]) {
        Transaction tx = session.beginTransaction();
        for(int i=0;i<cv.length;i++)
        {
            Query qry = session.createQuery("delete from Mybean b where b.no="+cv[i]);
            qry.executeUpdate();
        }
        System.out.println("Object(s) deleted successfully..");
        tx.commit();
    }

}

web.xml

1234567891011121314<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

struts.xml

123456789101112131415161718192021222324252627282930313233343536373839404142<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
    <include file="struts-default.xml"/>
    <package name="a" extends="struts-default">

        <action name="verify" class="java4s.Java4sController" method="getRecords">
            <result name="success">/retrive.jsp</result>
            <result name="error">/error.jsp</result>
        </action>

         <action name="update" class="java4s.Java4sController" method="getRecordToUpdate">
            <result name="success">/edit.jsp</result>
            <result name="error">/error.jsp</result>
        </action>

          <action name="updateRecInDB" class="java4s.Java4sController" method="updateRec">
            <result name="success">/successOperation.jsp</result>
            <result name="error">/error.jsp</result>
        </action>

         <action name="insert" class="java4s.Java4sController" method="insertRecord">
            <result name="success">/successOperation.jsp</result>
            <result name="error">/error.jsp</result>
        </action>

        <action name="delete" class="java4s.Java4sController" method="deleteRecord">
            <result name="success">/successOperation.jsp</result>
            <result name="error">/error.jsp</result>
        </action>

         <action name="*Link" class="java4s.Links" method="{1}">
            <result name="insert">/insertScreen.jsp</result>
            <result name="display">/retrive.jsp</result>
        </action>

    </package>
</struts>

Mybean.hbm

1234567891011121314151617<?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>
<class name="java4s.Mybean" table="details">

<id name="no" column="sno">
   <generator class="assigned"/>
</id>

<property name="nam" column="sname" length="10"/>
<property name="ct"  column="scountry"/>

</class>
</hibernate-mapping>

hibernate.cfg.xml

1234567891011121314151617181920<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    

<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@www.java4s.com:1521:XE</property>
<property name="connection.username">system</property>
<property name="connection.password">admin</property>

<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>

<mapping resource="Mybean.hbm.xml" />

</session-factory>
</hibernate-configuration>

Java4s.css

123456789101112131415161718192021222324252627282930313233.mtable
{
   width: 300px;
   border: 1px solid #b0dd6f;
   background: #c7d8ae;
   border-radius: 5px 5px 0px 0px;
  -webkit-border-radius: 5px 5px 0px 0px;
  -moz-border-radius:5px 5px 0px 0px;
}
.mtableu
{
   width: 300px;
   border: 1px solid #b0dd6f;
   background: #c7d8ae;
   border-radius: 5px 5px 0px 0px;
  -webkit-border-radius: 5px 5px 0px 0px;
  -moz-border-radius:5px 5px 0px 0px;
}
.th
{
font-family: verdana;
font-size: 12px;
}
.td
{
font-family: verdana;
font-size: 12px;
}
.bord,.label
{
font-family: verdana;
font-size: 12px;
}

 

Related Articles

post a comment