Saturday , August 19 2017
Home / Spring / Spring Hibernate Example

Spring Hibernate Example

In the previous tutorial, we have seen about Spring MVC Login Example, and we have validated the user credentials manually i.e we didn’t communicate with the Hibernate Framework for validating the user credentials.

In this tutorials we are going to integrate the hibernate framework to spring MVC.

Spring Hibernate Example

dependencies

I have attached Spring dependencies in the previous tutorials

hibernate-core-4.1.5.Final.jar

hibernate-commons-annotations-4.0.1.Final.jar

javassist-3.12.1.GA.jar

mysql-connector-java-5.0.6-bin.jar

commons-dbcp-1.2.jar

commons-pool-1.5.jar

commons-codec-1.4.jar

dom4j-1.6.1.jar

Creating the Login Page

Login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>User Login.</title>
    </head>
    <body>
        <h4>User Login.</h4>
        <form:form method="post" name="loginForm">
            <table>
                <tr><td>User Name: </td><td><input name="userName" type="textbox"></td></tr>
                <tr><td>Password: </td><td><input name="password" type="password"></td></tr>
                <tr><td colspan="2" align="right"><input type="submit" value="Submit"></td></tr>
            </table>
            <div style="color:red">${error}</div>
        </form:form>

    </body>
</html>

Creating sample home page

Home.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1 style="color:green">Hello </h1>
                <h1 style="color:royalblue">${userDetails.userName} ,</h1> <h1 style="color:green">welcome to Spring World !</h1>
    </body>
</html>

configure the spring MVC front end controller.

dispatcher-servlet.xml

<?xml version='1.0' encoding='UTF-8' ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

    <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping"/>
    <context:annotation-config />
    <context:component-scan base-package="com"  />
    <mvc:annotation-driven />
    
    <!--properties file location-->
    <context:property-placeholder location="classpath:com/onlinetutorialspoint/dbconfig/dbconfig.properties"/>
    <!--
    Most controllers will use the ControllerClassNameHandlerMapping above, but
    for the index controller we are using ParameterizableViewController, so we must
    define an explicit mapping for it.
    -->
    
    <bean id="liveDataSource" class="org.apache.commons.dbcp.BasicDataSource" >
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url">
            <value>${db.url}</value>
        </property>
        <property name="username" >
            <value>${db.username}</value>
        </property>
        <property name="password" >
            <value>${db.password}</value>
        </property>
    </bean>
    <bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="liveDataSource"/>
        <property name="mappingResources">
            <list>
                <value>com/onlinetutorialspoint/service/Login.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <ref bean="exampleHibernateProperties" />
        </property>
    </bean>
    <bean id="exampleHibernateProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="properties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>
    </bean>
    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="index.htm">indexController</prop>
            </props>
        </property>
    </bean>

    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp" />

    <!--
    The index controller.
    -->
    <bean name="indexController"
          class="org.springframework.web.servlet.mvc.ParameterizableViewController"
          p:viewName="index" />

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory">
            <ref bean="mySessionFactory"/>
        </property>
    </bean>
</beans>

DataBase configuration.

dbconfig.properties


db.url=jdbc:mysql://localhost:3306/onlinetutorialspoint?autoReconnect=true

db.username=chandu
db.password=123456

Create a Database Table like below.


CREATE TABLE `Login` (
`id` INT(10) NOT NULL DEFAULT '0',
`userName` VARCHAR(50) NULL DEFAULT NULL,
`password` VARCHAR(50) NULL DEFAULT NULL,
`isactive` TINYINT(4) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'

Create Pojo calss for above table.

Login.java


import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="Login"
    ,catalog="onlinetutorialspoint"
)
public class Login  implements java.io.Serializable {

     private int id;
     private String userName;
     private String password;
     private Byte isactive;

    public Login() {
    }

    public Login(int id) {
        this.id = id;
    }
    public Login(int id, String userName, String password, Byte isactive) {
       this.id = id;
       this.userName = userName;
       this.password = password;
       this.isactive = isactive;
    }
   
     @Id 

    @Column(name="id", unique=true, nullable=false)
    public int getId() {
        return this.id;
    }
    
    public void setId(int id) {
        this.id = id;
    }

    @Column(name="userName", length=50)
    public String getUserName() {
        return this.userName;
    }
    
    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Column(name="password", length=50)
    public String getPassword() {
        return this.password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }

    @Column(name="isactive")
    public Byte getIsactive() {
        return this.isactive;
    }
    
    public void setIsactive(Byte isactive) {
        this.isactive = isactive;
    }

}

Create hbm.xml file for created pojo with respect to the table.

Login.hbm.xml


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.onlinetutorialspoint.service.Login" table="Login" catalog="onlinetutorialspoint">
        <id name="id" type="int">
            <column name="id" />
            <generator class="assigned" />
        </id>
        <property name="userName" type="string">
            <column name="userName" length="50" />
        </property>
        <property name="password" type="string">
            <column name="password" length="50" />
        </property>
        <property name="isactive" type="java.lang.Byte">
            <column name="isactive" />
        </property>
    </class>
</hibernate-mapping>

create Model class for communicating

LoginModel.java


public class LoginModel {

    private String userName;
    private String password;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "LoginModel{" + "userName=" + userName + ", password=" + password + '}';
    }
}

Create DAO class for data accessing.

LoginDAO.java

import com.onlinetutorialspoint.service.Login;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
public class LoginDAO {

    @Autowired
    SessionFactory mySessionFactory;

    @Transactional(value = "transactionManager")
    public Login getUserDetails(String userName) {
        Login login = null;
        try {

            Session currentSession = mySessionFactory.openSession();
            Query query = currentSession.createQuery("from Login where userName='" + userName+"'");
            List list = query.list();
            System.out.println("list : " + list);
            if (list != null) {
                login = (Login) list.get(0);
            }
            return login;

        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

Create the corresponding controller for Login.jsp

LoginController.java


import com.onlinetutorialspoint.dao.LoginDAO;
import com.onlinetutorialspoint.model.LoginModel;
import com.onlinetutorialspoint.service.Login;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("login.htm")
public class LoginController {

    @Autowired
    LoginDAO loginDAO;

    @RequestMapping(method = RequestMethod.GET)
    public String init(ModelMap modelMap) {
        modelMap.put("info", "Hello User");
        return "Login";
    }

    @RequestMapping(method = RequestMethod.POST)
    public String submit(ModelMap modelMap, @ModelAttribute("loginModel") @Valid LoginModel loginModel) {
        String password = loginModel.getPassword();
        String userName = loginModel.getUserName();
        if (password != null && userName != null) {
            Login userDetails = loginDAO.getUserDetails(loginModel.getUserName());
            if (userDetails != null && userDetails.getUserName().trim().equals(userName)
                    && userDetails.getPassword().trim().equals(password)) {
                modelMap.put("userDetails", userDetails);
                return "Home";
            } else {
                modelMap.put("error", "Invalid UserName / Password");
                return "Login";
            }
        } else {
            modelMap.put("error", "Invalid UserName / Password");
            return "Login";
        }
    }
}

 

About chandrashekhar

Hi Folks, you have reach this so far, that shows you like what you are learning. Then why don't you support us to improve for bettor tutorials by leaving your valuable comments and why not you keep in touch with us for latest updates on your favorite blog @ facebook , twitter , Or Google+ ,

Recommended

Spring Bean Autowire ByType Example

In this tutorial, we are going to learn about one of the autowire strategy in …

Leave a Reply

Your email address will not be published. Required fields are marked *