<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
|
SimpleUrlHandlerMapping:
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/test/userPage.do"><ref bean="userController"/></entry>
</map>
</property>
</bean>
Controllers :
<bean id="userFormValidator" class="com.UserFormValidator"/>
<bean id="userController" class="com.UserController">
<property name="sessionForm"><value>true</value></property>
<property name="commandName"><value>userBean</value></property>
<property name="commandClass"><value>com.UserBean</value></property>
<property name="validator"><ref bean="userFormValidator"/></property>
<property name="formView"><value>userForm</value></property>
<property name="successView"><value>success</value></property>
<property name="userdao"><ref bean="userdao"/></property>
</bean>
If in the browser you call http://localhost:8080/springhibernate/test/userPage.do then
formBackingObject() method of UserController class will be called and forward to /WEB-INF/jsp/userForm.jsp based on below configuration
<property name="formView"><value>userForm</value></property>
formBackingObject() method return formView.
Step 3. Controller classes
UserController.java
If in the browser you call http://localhost:8080/springhibernate/test/userPage.do then
formBackingObject() method of UserController class will be called and forward to /WEB-INF/jsp/userForm.jsp based on below configuration
<property name="formView"><value>userForm</value></property>
package com;
import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.SimpleFormController;
public class UserController extends SimpleFormController{ private UserDAO userdao; public Object formBackingObject(HttpServletRequest request) throws ServletException { UserBean backingObject = new UserBean(); System.out.println("formBackingObject"); return backingObject; } public ModelAndView onSubmit(Object command) throws ServletException { UserBean user = (UserBean)command; System.out.println("username :"+user.getUserName()); System.out.println("dept :"+user.getDeptName()); getUserdao().saveUser(user); //Now you can validate to database return new ModelAndView("succes"); }
/** * @return Returns the userdao. */ public UserDAO getUserdao() { return userdao; } /** * @param userdao The userdao to set. */ public void setUserdao(UserDAO userdao) { this.userdao = userdao; } }
|
In the userForm.jsp
<form method="post" action="/springhibernate/test/userPage.do">
<input type="submit" alignment="center" value="Save">
on submit the save button call will goto onSubmit() method of the UserController.java
and besed on return new ModelAndView("succes"); contoller forward to /WEB-INF/jsp/succes.jsp
Spring and Hibernate Integration
Step 4. applicationContext.xml
applicationContext.xml contains all the Dependency Injections . And it contains hibernate SessionFactory information also.
Here Hibernate integatred with Spring.
userservice object has userdao object as setter Injection
userdao object has sessionFactory object as setter Injection.
<?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.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> <property name="url"><value>jdbc:mysql://localhost:3306/techfaq</value></property> <property name="username"><value>techfaq</value></property> <property name="password"><value>techfaq</value></property> </bean> <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"><ref bean="myDataSource"/></property> <property name="mappingResources"> <list> <value>/com/user.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQLDialect </value> </property> </bean> <bean id="userdao" class="com.UserDAO"> <property name="sessionFactory"><ref bean="mySessionFactory"/></property> </bean> </beans>
|
here is the relation between userController and userdao. (in the test-servlet.xml)
<bean id="userController" class="com.UserController">
<property name="sessionForm"><value>true</value></property>
<property name="commandName"><value>userBean</value></property>
<property name="commandClass"><value>com.UserBean</value></property>
<property name="validator"><ref bean="userFormValidator"/></property>
<property name="formView"><value>userForm</value></property>
<property name="successView"><value>success</value></property>
<property name="userdao"><ref bean="userdao"/></property>
</bean>
Hibernate Part
Step 1. Create Table in Data Base
CREATE TABLE `techfaq`.`user_test`
(
`user_id` int(10) unsigned NOT NULL auto_increment,
`user_name` varchar(45) default NULL,
`dept_name` varchar(45) default NULL,
PRIMARY KEY (`user_id`));
|
Step 2. user.hbm.xml which maps to user_test TABLE
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping> <class name="com.UserBean" table="USER_TEST"> <id name="userId" column="USER_ID" type="int"> <generator class="native"/> </id> <property name="userName" column="user_name"/> <property name="deptName" column="dept_name"/>
</class>
</hibernate-mapping>
|
Step 3. UserBean.java which maps to user.hbm.xml and user_test TABLE
package com;
public class UserBean { int userId; String userName; String deptName;
/** * @return Returns the userName. */ public String getUserName() { return userName; } /** * @param userName The userName to set. */ public void setUserName(String userName) { this.userName = userName; } /** * @return Returns the deptName. */ public String getDeptName() { return deptName; } /** * @param deptName The deptName to set. */ public void setDeptName(String deptName) { this.deptName = deptName; } /** * @return Returns the userId. */ public int getUserId() { return userId; } /** * @param userId The userId to set. */ public void setUserId(int userId) { this.userId = userId; } }
|
Step 4. UserDAO.java which is used to save user details into Data Base
package com;
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction;
import org.springframework.orm.hibernate.support.HibernateDaoSupport;
public class UserDAO { private SessionFactory sessionFactory; public void saveUser(UserBean user){ Session session = getSessionFactory().openSession(); try { Transaction tx = session.beginTransaction(); session.save(user); tx.commit(); }catch(Exception e){ e.printStackTrace(); }finally{ session.close(); }
}
/** * @return Returns the sessionFactory. */ public SessionFactory getSessionFactory() { return sessionFactory; } /** * @param sessionFactory The sessionFactory to set. */ public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } }
|