Spring MVC Hibernate integration examples
We will see Spring MVC Hibernate integration example using Java Configuration.
1) Create a maven web project in eclipse
<groupid>com.bala</groupid>
<artifactid>spring-mvc-hibernate-annotationbased</artifactid>
<name>spring-mvc-hibernate-annotationbased</name>
<version>1.0.0-BUILD-SNAPSHOT</version>
2). In pom.xml add the required dependencies like
Servlet JSP,MySQL etc.
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelversion>4.0.0</modelversion>
<groupid>com.bala</groupid>
<artifactid>spring-mvc-hibernate-annotationbased</artifactid>
<name>spring-mvc-hibernate-annotationbased</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.8</java-version>
<org .springframework-version="">4.3.0.RELEASE</org>
<org .aspectj-version="">1.6.10</org>
<org .slf4j-version="">1.6.6</org>
<springsecurity .version="">4.0.4.RELEASE</springsecurity>
<hibernate .version="">4.3.11.Final</hibernate>
<mysql .connector.version="">5.1.31</mysql>
</properties>
<dependencies>
<!--Spring-->
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-core</artifactid>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-web</artifactid>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-webmvc</artifactid>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-tx</artifactid>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupid>org.springframework</groupid>
<artifactid>spring-orm</artifactid>
<version>${org.springframework-version}</version>
</dependency>
<!--AspectJ-->
<dependency>
<groupid>org.aspectj</groupid>
<artifactid>aspectjrt</artifactid>
<version>${org.aspectj-version}</version>
</dependency>
<!--Hibernate-->
<dependency>
<groupid>org.hibernate</groupid>
<artifactid>hibernate-core</artifactid>
<version>${hibernate.version}</version>
</dependency>
<!--jsr303 validation-->
<dependency>
<groupid>javax.validation</groupid>
<artifactid>validation-api</artifactid>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupid>org.hibernate</groupid>
<artifactid>hibernate-validator</artifactid>
<version>5.1.3.Final</version>
</dependency>
<!--MySQL-->
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>${mysql.connector.version}</version>
</dependency>
<!--Logging-->
<dependency>
<groupid>org.slf4j</groupid>
<artifactid>slf4j-api</artifactid>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupid>org.slf4j</groupid>
<artifactid>jcl-over-slf4j</artifactid>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupid>org.slf4j</groupid>
<artifactid>slf4j-log4j12</artifactid>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupid>log4j</groupid>
<artifactid>log4j</artifactid>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupid>javax.mail</groupid>
<artifactid>mail</artifactid>
</exclusion>
<exclusion>
<groupid>javax.jms</groupid>
<artifactid>jms</artifactid>
</exclusion>
<exclusion>
<groupid>com.sun.jdmk</groupid>
<artifactid>jmxtools</artifactid>
</exclusion>
<exclusion>
<groupid>com.sun.jmx</groupid>
<artifactid>jmxri</artifactid>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!--@Inject-->
<dependency>
<groupid>javax.inject</groupid>
<artifactid>javax.inject</artifactid>
<version>1</version>
</dependency>
<!--Spring Security-->
<dependency>
<groupid>org.springframework.security</groupid>
<artifactid>spring-security-web</artifactid>
<version>${springsecurity.version}</version>
</dependency>
<dependency>
<groupid>org.springframework.security</groupid>
<artifactid>spring-security-config</artifactid>
<version>${springsecurity.version}</version>
</dependency>
<dependency>
<groupid>org.springframework.security</groupid>
<artifactid>spring-security-taglibs</artifactid>
<version>${springsecurity.version}</version>
</dependency>
<!--Servlet+JSP+JSTL-->
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>javax.servlet-api</artifactid>
<version>3.1.0</version>
</dependency>
<dependency>
<groupid>javax.servlet.jsp</groupid>
<artifactid>javax.servlet.jsp-api</artifactid>
<version>2.3.1</version>
</dependency>
<dependency>
<groupid>javax.servlet</groupid>
<artifactid>jstl</artifactid>
<version>1.2</version>
</dependency>
<!--Test-->
<dependency>
<groupid>junit</groupid>
<artifactid>junit</artifactid>
<version>4.7</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactid>maven-eclipse-plugin</artifactid>
<version>2.10</version>
<configuration>
<additionalprojectnatures>
<projectnature>org.springframework.ide.eclipse.core.springnature</projectnature>
</additionalprojectnatures>
<additionalbuildcommands>
<buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand>
</additionalbuildcommands>
<downloadsources>true</downloadsources>
<downloadjavadocs>true</downloadjavadocs>
</configuration>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-compiler-plugin</artifactid>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<showwarnings>true</showwarnings>
<showdeprecation>true</showdeprecation>
</configuration>
</plugin>
<plugin>
<groupid>org.codehaus.mojo</groupid>
<artifactid>exec-maven-plugin</artifactid>
<version>1.6.0</version>
<configuration>
<mainclass>org.test.int1.Main</mainclass>
</configuration>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-war-plugin</artifactid>
<version>2.4</version>
<configuration>
<warsourcedirectory>src/main/webapp</warsourcedirectory>
<warname>springapp</warname>
<failonmissingwebxml>false</failonmissingwebxml>
</configuration>
</plugin>
</plugins>
</build>
</project>
Database
In MySQL command line or in workbench create a database using the command.create database userdb;
For tables in the database, we have let hibernate create for us. As we give property hibernate.hbm2ddl.auto = create to hibernate so it will create a database for use.
We have property file where we mentioned database connection details
application.properties
db.driver = com.mysql.jdbc.Driver
db.url = jdbc:mysql://localhost/userdb?useSSL=false
db.username = root
db.password = root
# Hibernate
hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto = create
hibernate.show_sql = true
entitymanager.packagesToScan = com.bala.spring.model
Configure JSP views and resources for web applications as below
package com.bala.spring.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.bala.spring")
public class AppConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
}
Register Dispatcher Servlet for Spring application.
package com.bala.spring.config;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.ContextLoaderListener;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
public class AppInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(AppConfig.class);
// Manage the lifecycle of the root application context
container.addListener(new ContextLoaderListener(ctx));
ctx.setServletContext(container);
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherServlet = new AnnotationConfigWebApplicationContext();
dispatcherServlet.register(AppConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherServlet));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
Database properties and hibernate Session Factory
package com.bala.spring.config;
import java.util.Properties;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.bala.spring" })
@PropertySource(value = { "classpath:application.properties" })
public class DatabaseConfig {
@Value("${db.driver}")
private String DB_DRIVER;
@Value("${db.password}")
private String DB_PASSWORD;
@Value("${db.url}")
private String DB_URL;
@Value("${db.username}")
private String DB_USERNAME;
@Value("${hibernate.dialect}")
private String HIBERNATE_DIALECT;
@Value("${hibernate.show_sql}")
private String HIBERNATE_SHOW_SQL;
@Value("${hibernate.hbm2ddl.auto}")
private String HIBERNATE_HBM2DDL_AUTO;
@Value("${entitymanager.packagesToScan}")
private String ENTITYMANAGER_PACKAGES_TO_SCAN;
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(DB_DRIVER);
dataSource.setUrl(DB_URL);
dataSource.setUsername(DB_USERNAME);
dataSource.setPassword(DB_PASSWORD);
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource());
// sessionFactoryBean.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);
sessionFactoryBean.setPackagesToScan(new String[] { "com.bala.spring.model" });
Properties hibernateProperties = new Properties();
hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);
hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);
hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);
sessionFactoryBean.setHibernateProperties(hibernateProperties);
return sessionFactoryBean;
}
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager transactionManager =
new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
}
Model class for database operations.
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@NotNull
@Column(name = "password")
private String password;
@Column(name = "email")
private String email;
@Column(name = "fname")
private String fname;
@Column(name = "username")
private String username;
@Column(name = "lname")
private String lname;
// @NotEmpty(message = "Please enter your phone")
@Column(name = "phone")
private String phone;
@Column(name = "date_created")
private Date dateCreated;
@Column(name = "last_updated")
private Date lastUpdated;
private String passwordConfirm;
//@Getters @Setters @toString()
public User() {
}
public User(String email, String password, String fname, String lname, String phone) {
this.email = email;
this.password = password;
this.fname = fname;
this.lname = lname;
this.phone = phone;
}
}
Write data access code
@Repository
@Transactional
public class UserDao {
@Autowired
private SessionFactory sessionFactory;
private static final Logger logger = LoggerFactory.getLogger(UserDao.class);
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
public void save(User user) {
getSession().save(user);
getSession().flush();
return;
}
public List<user> getUserList() {
// TODO Auto-generated method stub
List<user> users = getSession().createCriteria(User.class).list();
return users;
}
}
Spring controller
package com.bala.spring.config.dao;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.sql.DataSource;
import com.bala.spring.model.User;
import javax.transaction.Transactional;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.ArrayList;
import java.util.Date;
import javax.transaction.Transactional;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Repository
@Transactional
public class UserDao {
@Autowired
private SessionFactory sessionFactory;
private static final Logger logger = LoggerFactory.getLogger(UserDao.class);
protected Session getSession() {
return sessionFactory.getCurrentSession();
}
public void save(User user) {
logger.info("****************save user*****************************.", "save");
getSession().save(user);
getSession().flush();
return;
}
/*public void delete(User user) {
getSession().delete(user);
return;
}
*/
@SuppressWarnings("unchecked")
public List<user> getAll() {
return getSession().createQuery("from User").list();
}
public User getByEmail(String email) {
logger.info("****************getByEmail*****************************.", "getByEmail");
return (User) getSession().createQuery("from User where email = :email").setParameter("email", email)
.uniqueResult();
}
public User getByUsername(String username) {
logger.info("****************getByEmail*****************************.", "getByUsername");
return (User) getSession().createQuery("from User where username = :username")
.setParameter("username", username).uniqueResult();
}
public List<user> getUserList() {
// TODO Auto-generated method stub
List<user> users = getSession().createCriteria(User.class).list();
return users;
}
}
Service layer
package com.bala.spring.service;
import com.bala.spring.config.dao.UserDao;
import com.bala.spring.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public void save(User user) {
userDao.save(user);
}
@Override
public User findByUsername(String username) {
return userDao.getByUsername(username);
}
@Override
public List<user> getUserList() {
// TODO Auto-generated method stub
return userDao.getUserList();
}
}
View files
register.jsp
%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page session="true"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<c:set value="${pageContext.request.contextPath}" var="contextPath">
<c:set value="${pageContext.request.contextPath}" var="contextPath">
<html>
<head>
<jsp:include page="header.jsp"></jsp:include>
</head>
<body>
<div class="login-page">
<div class="form">
<form:form action="register" class="login-form" method="POST" modelattribute="user">
<form:input class="form-control" id="inputName" path="fname" placeholder="Fisrt Name" type="text">
<form:input class="form-control" path="lname" placeholder="Last Name" type="text">
<form:input class="form-control" path="phone" placeholder="phone No" type="text">
<form:input class="form-control" path="email" placeholder="Email" required="true" type="email">
<form:input class="form-control" path="username" placeholder="username" required="true" type="username">
<form:input class="form-control" path="password" placeholder="Password" required="true" type="password">
<!-- <label>
<input type="checkbox" required> Accept our <a href="#">privacy policy</a> and <a href="#">customer agreement</a>
</label> -->
<button class="btn btn-group btn-default btn-animated" type="submit">Sign Up </button>
<p class="message">Already registered? <a href="login">Sign In</a></p>
</form:input></form:input></form:input></form:input></form:input></form:input></form:form>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="${contextPath}/resources/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
console.log("hello");
$('.message a').click(function(){
$('form').animate({height: "toggle", opacity: "toggle"}, "slow");
});
});
</script>
</body>
</html>
login.jsp
<html>
<head>
<jsp:include page="header.jsp"></jsp:include>
</head>
<body>
<div class="login-page">
<div class="form">
<form:form action="${contextPath}/login" class="login-form" method="POST" modelattribute="user">
<input name="${_csrf.parameterName}" type="hidden" value="${_csrf.token}" />
<form:input id="inputUserName" path="username" placeholder="User Name" required="true" type="text">
<span><form:errors cssclass="error" path="username"></form:errors></span>
<form:input id="inputPassword" path="password" placeholder="Password" required="true" type="password">
<button class="btn btn-group btn-default btn-animated" type="submit">Log In </button>
<p class="message">Not registered? <a href="register">Create an account</a></p>
</form:input></form:input></form:form>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="${contextPath}/resources/js/bootstrap.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
console.log("hello");
$('.message a').click(function(){
$('form').animate({height: "toggle", opacity: "toggle"}, "slow");
});
});
</script>
</body>
</html>
success.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page session="true"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<c:set value="${pageContext.request.contextPath}" var="contextPath">
<html>
<head>
<jsp:include page="header.jsp"></jsp:include>
</head>
<body>
<div class="jumbotron">
<h1>Welcome !!!</h1>
<p> ${message}. </p>
<p><a class="btn btn-primary btn-lg" href="home" role="button">Home</a></p>
</div>
</body>
</html>
In this article, we have seen the Spring MVC Hibernate integration example using java configuration. All source code in the article can be found in the GitHub repository.
0 Comments
Post a Comment