Struts Spring Hibernate
In this section, you will learn about the Struts, Spring and Hibernate Integration.
The tools & technology used is given below :
- struts 2.1.8
- spring 2.5.6
- hibernate 3.2.7
- dom4j 1.6.1
- cglib 2.2
- Eclipse 3.5
The SQL query used to create the employee table is given below :
CREATE TABLE `employee` ( `EMPLOYEE_ID` bigint(20) unsigned NOT NULL auto_increment, `NAME` varchar(45) NOT NULL, `ADDRESS` varchar(255) NOT NULL, `CREATED_DATE` datetime NOT NULL, PRIMARY KEY (`EMPLOYEE_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
Three easy steps to integrate Struts, Spring and Hibernate :
- Collect all the jar file needed into project lib.
- To integrate Struts 2 with Spring, incorporate ContextLoaderListener.
- To integrate Spring with Hibernate, incorporate LocalSessionFactoryBean.
Let us discuss these steps in detail using a example :
Example
The project structure is given below:
The jar file used is given below :
CODES
web.xml
In the below example, Listener class ContextLoaderListener loads SpringBeans.xml file(which load beans), and also interact with Struts. It also loads bean class LocalSessionFactoryBean which will deal with Hibernate.
<?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"> <display-name>StrutsSpringHibernate</display-name> <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> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/SpringBeans.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> </web-app>
SpringBeans.xml
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- Database Configuration --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>/WEB-INF/properties/database.properties </value> </property> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- Hibernate session factory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> <property name="mappingResources"> <list> <value>net/roseindia/hibernate/Employee.hbm.xml</value> </list> </property> </bean> <!-- Beans Declaration --> <bean id="employeeAction" class="net.roseindia.employee.action.EmployeeAction"> <property name="employeeDAO" ref="employeeDAO" /> </bean> <bean id="employeeDAO" class="net.roseindia.employee.dao.impl.EmployeeDAOImpl" > <property name="sessionFactory" ref="sessionFactory" /> </bean> </beans>
struts.xml
<?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> <constant name="struts.devMode" value="true" /> <package name="default" extends="struts-default" namespace="/" > <action name="addEmployeeAction" class="net.roseindia.employee.action.EmployeeAction" method="addEmployee" > <result name="success">pages/employee.jsp</result> </action> <action name="listEmployeeAction" class="net.roseindia.employee.action.EmployeeAction" method="listEmployee" > <result name="success">pages/employee.jsp</result> </action> </package> </struts>
Employee.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> <class name="net.roseindia.employee.model.Employee" table="employee"> <id name="employeeId" type="java.lang.Long"> <column name="EMPLOYEE_ID" /> <generator class="identity" /> </id> <property name="name" type="string"> <column name="NAME" length="45" not-null="true" /> </property> <property name="address" type="string"> <column name="ADDRESS" not-null="true" /> </property> <property name="createdDate" type="timestamp"> <column name="CREATED_DATE" length="19" not-null="true" /> </property> </class> </hibernate-mapping>
Employee.java
package net.roseindia.employee.model; import java.util.Date; public class Employee implements java.io.Serializable { private Long employeeId; private String name; private String address; private Date createdDate; public Employee() { } public Employee(Long employeeId, String name, String address, Date createdDate) { this.employeeId = employeeId; this.name = name; this.address = address; this.createdDate = createdDate; } public Long getEmployeeId() { return employeeId; } public void setEmployeeId(Long employeeId) { this.employeeId = employeeId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Date getCreatedDate() { return createdDate; } public void setCreatedDate(Date createdDate) { this.createdDate = createdDate; } }
EmployeeDAO.java
package net.roseindia.employee.model; import java.util.Date; public class Employee implements java.io.Serializable { private Long employeeId; private String name; private String address; private Date createdDate; public Employee() { } public Employee(Long employeeId, String name, String address, Date createdDate) { this.employeeId = employeeId; this.name = name; this.address = address; this.createdDate = createdDate; } public Long getEmployeeId() { return employeeId; } public void setEmployeeId(Long employeeId) { this.employeeId = employeeId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Date getCreatedDate() { return createdDate; } public void setCreatedDate(Date createdDate) { this.createdDate = createdDate; } }
EmployeeDAOImpl.java
package net.roseindia.employee.dao.impl; import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; import net.roseindia.employee.dao.EmployeeDAO; import net.roseindia.employee.model.Employee; public class EmployeeDAOImpl extends HibernateDaoSupport implements EmployeeDAO{ //add the customer public void addEmployee(Employee employee){ getHibernateTemplate().save(employee); } //return all the customers in list public List<Employee> listEmployee(){ return getHibernateTemplate().find("from Employee"); } }
EmployeeAction.java
package net.roseindia.employee.action; import java.util.ArrayList; import java.util.Date; import java.util.List; import net.roseindia.employee.dao.EmployeeDAO; import net.roseindia.employee.model.Employee; import com.opensymphony.xwork2.ModelDriven; public class EmployeeAction implements ModelDriven{ Employee employee = new Employee(); List<Employee> employeeList = new ArrayList<Employee>(); EmployeeDAO employeeDAO; //Spring Dependency Injection public void setEmployeeDAO(EmployeeDAO employeeDAO) { this.employeeDAO = employeeDAO; } public Object getModel() { return employee; } public List<Employee> getEmployeeList() { return employeeList; } public void setEmployeeList(List<Employee> employeeList) { this.employeeList = employeeList; } //saving employee record public String addEmployee() throws Exception{ //save employee employee.setCreatedDate(new Date()); employeeDAO.addEmployee(employee); //reload the employee list employeeList = null; employeeList = employeeDAO.listEmployee(); return "success"; } //list all customers public String listEmployee() throws Exception{ employeeList = employeeDAO.listEmployee(); return "success"; } }
database.properties
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://192.168.10.13:3306/company jdbc.username=root jdbc.password=root
employee.jsp
<%@ taglib prefix="s" uri="/struts-tags" %> <html> <head> </head> <body> <h2><i>Integration Example - Struts 2,Spring & Hibernate</i></h2> <hr></hr> <h3><i>Add New Employee</i></h3> <s:form action="addEmployeeAction" > <s:textfield name="name" label="Employee Name" value="" size="37"/> <s:textarea name="address" label="Employee Address" value="" cols="28" rows="3" /> <s:submit align="center"/> </s:form> <hr></hr> <h3><i>Employee List</i></h3> <s:if test="employeeList.size() > 0"> <table border="2px" cellpadding="8px"> <tr> <th>Employee<br/>ID</th> <th>Name</th> <th>Address</th> <th>Created Date</th> </tr> <s:iterator value="employeeList" status="userStatus"> <tr> <td><s:property value="employeeId" /></td> <td><s:property value="name" /></td> <td><s:property value="address" /></td> <td><s:date name="createdDate" format="dd/MM/yyyy" /></td> </tr> </s:iterator> </table> </s:if> <br/> <br/> </body> </html>
OUTPUT
When you call the following URL :
http://localhost:9090/StrutsSpringHibernate/listEmployeeAction.action
you will get the following page :