

This is example of Spring4 + Hibernate4 + MYSql. In this example we try to explain how to communicate with database using spring.
- Controller
- Controller will accept request from client and prepare response using service layer. After preparing response by service layer pass those data to view layer. View Layer may jsp, xml, json.
- To Define Controller @Controller annotation is used.
- Service Layer
- Service layer can be defined using @Service annotation at class level. Service layer is responsible for business logic. Service layer communicate with Database layer perform database operation.
- DAO Layer
- DAO layer is used to perform database operations. In this example we are using MySQL as database. DAO layer inject SessionFactory object using that DAO Layer perform database object.
Table of Contents
Technology Used:
- String 4.3.0
- Hibernate 4.2.11
- MySQL
- Maven 2.3.2
- Tomcat 7
- Java 8
- IntelljIDEA 14
Project Structure:
Maven Dependency:
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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.springapp</groupId> <artifactId>spring-hibername-java-configuration</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>spring-hibername-java-configuration</name> <properties> <spring.version>4.3.1.RELEASE</spring.version> <hibernate.version>4.2.11.Final</hibernate.version> <mysql.connector.version>5.1.31</mysql.connector.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <!--Transaction API--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.1</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>${hibernate.version}</version> </dependency> <!-- MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.connector.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> <build> <finalName>spring-hello-work</finalName> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build> </project>
Java Code:
EmployeeController.java
package com.springdemo.controller; import com.springdemo.model.Employee; import com.springdemo.service.EmployeeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("/") public class EmployeeController { @Autowired private EmployeeService employeeService; @RequestMapping(method = RequestMethod.GET) public String printWelcome(ModelMap model) { return "createEmployee"; } @RequestMapping(value = "viewEmployee", method = RequestMethod.GET) public String viewEmployee(ModelMap model) { model.addAttribute("employees", employeeService.list()); return "viewEmployee"; } @RequestMapping(value = "saveEmployee", method = RequestMethod.POST) public String saveEmployee(Employee employee) { employeeService.save(employee); return "redirect:viewEmployee"; } }
Employee.java
@Entity indicate that table name refer in Java like when create HSL query.
@Table indicate that name of table which are available in database.
@ID indicate its primary key will be created in database.
@Column: column will be create in that table.
here we can also pass name attribute like @Column(name=”employee_name’) so that column name(employee_name) will be create in database and we can use our favorite camel notation in java(employeeName).
package com.springdemo.model; import javax.persistence.*; /** * Created by Subhash Lamba on 22-01-2017. */ @Entity(name = "Employee") @Table(name = "Employee") public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int employeeId; @Column private String employeeName; public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName = employeeName; } public int getEmployeeId() { return employeeId; } public void setEmployeeId(int employeeId) { this.employeeId = employeeId; } }
Service Layer
EmployeeService.java
package com.springdemo.service; import com.springdemo.model.Employee; import java.util.List; public interface EmployeeService { public void save(Employee employee); public List<Employee> list(); }
EmployeeServiceImpl.java
package com.springdemo.service; import com.springdemo.dao.EmployeeDAO; import com.springdemo.model.Employee; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class EmployeeServiceImpl implements EmployeeService { @Autowired private EmployeeDAO employeeDAO; @Override public void save(Employee employee) { employeeDAO.save(employee); } @Override public List<Employee> list() { return employeeDAO.list(); } }
DAO Layer
EmployeeDAO.java
package com.springdemo.dao; import com.springdemo.model.Employee; import java.util.List; public interface EmployeeDAO { public void save(Employee employee); public List<Employee> list(); }
EmployeeDAOImpl.java
package com.springdemo.dao; import com.springdemo.model.Employee; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Repository @Transactional public class EmployeeDAOImpl implements EmployeeDAO { @Autowired SessionFactory sessionFactory; @Override public void save(Employee employee) { sessionFactory.getCurrentSession().save(employee); } @Override public List<Employee> list() { return sessionFactory.getCurrentSession().createCriteria(Employee.class).list(); } }
createEmployee.jsp
<html> <body> <form action="saveEmployee" method="post"> Name: <input type="text" name="employeeName"> <input type="submit" value="Save"> </form> </body> </html>
viewEmployee.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <body> <h1>Employee List</h1> <table border="1"> <tr> <th> Id <th> Name </tr> <c:forEach var="employee" items="${employees}"> <tr> <td> <c:out value="${employee.employeeId}" /> <td> <c:out value="${employee.employeeName}" /> </tr> </c:forEach> </table> </body> </html>
Spring MVC Configurations:
SpringWebConfig.java
package com.springdemo.configs; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; @Configuration @ComponentScan({ "com.springdemo" }) public class SpringWebConfig extends WebMvcConfigurerAdapter { @Bean public InternalResourceViewResolver viewResolver () { InternalResourceViewResolver viewResolver=new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/pages/"); viewResolver.setSuffix(".jsp"); return viewResolver; } }
HibernateConfig.java
package com.springdemo.configs; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.hibernate4.HibernateTransactionManager; import org.springframework.orm.hibernate4.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; import java.util.Properties; @Configuration @EnableTransactionManagement @PropertySource(value = {"classpath:application.properties"}) public class HiberanteConfig { @Autowired private Environment environment; @Bean public DriverManagerDataSource getDataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(environment.getProperty("jdbc.driverClassName")); dataSource.setUrl(environment.getProperty("jdbc.url")); dataSource.setUsername(environment.getProperty("jdbc.username")); dataSource.setPassword(environment.getProperty("jdbc.password")); return dataSource; } @Autowired @Bean(name = "sessionFactory") public LocalSessionFactoryBean getSessionFactory(DriverManagerDataSource dataSource) { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setPackagesToScan(new String[]{"com.springdemo.model"}); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } private Properties hibernateProperties() { Properties properties = new Properties(); properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); properties.put("hibernate.hbm2ddl.auto", "create"); return properties; } @Autowired @Bean(name = "transactionManager") public HibernateTransactionManager getTransactionManager( SessionFactory sessionFactory) { HibernateTransactionManager transactionManager = new HibernateTransactionManager( sessionFactory); return transactionManager; } }
application.properties
<pre class="enlighterjsraw" data-enlighter-language="null">jdbc.driverClassName = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://localhost:3306/demo_database jdbc.username = root jdbc.password = hibernate.dialect = org.hibernate.dialect.MySQLDialect hibernate.show_sql = false hibernate.format_sql = false
Web Configurations:
WebConfigs.java
package com.springdemo.configs; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class WebConfigs extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[] { SpringWebConfig.class }; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[] { SpringWebConfig.class }; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
Download source code
spring-hibernate-java-configuration