How to Create a Project using Spring MVC and Hibernate 5? (original) (raw)
Last Updated : 16 Jun, 2026
Spring MVC is a popular framework for building Java-based web applications using the Model-View-Controller (MVC) architecture. Hibernate 5 is an Object Relational Mapping (ORM) framework that simplifies database operations by mapping Java objects to database tables.
- Configure Spring MVC and Hibernate 5 using Java-based configuration.
- Connect the application to an H2 in-memory database.
- Perform basic database operations using Hibernate SessionFactory.
Prerequisites
- Java 8 or later
- Maven
- IntelliJ IDEA / Eclipse / STS
- Basic knowledge of Spring and Hibernate
Steps to Create a Project using Spring MVC and Hibernate 5
Step 1: Create a Maven Project
- Open STS IDE.
- Click File - New - Maven Project.
- Select Create a simple project (Select archetype ) and click Next.
Then Enter the following details:
- **Group Id: com.gfg
- **Artifact Id: spring-hibernate-example
- **Packaging: war
Click Finish.
Before moving into the coding part let's have a look at the file structure in the below image.

Step 2: Add Required Dependencies
Add the following maven dependencies and plugin to your pom.xml file.
XML `
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>springmvc-hibernate-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>5.2.3.RELEASE</spring.version>
<hibernate.version>5.4.2.Final</hibernate.version>
</properties>
<dependencies>
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring ORM -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring Transaction -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- Hibernate Core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<!-- H2 Database -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.197</version>
</dependency>
<!-- Commons DBCP2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.7.0</version>
</dependency>
<!-- JPA API -->
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency>
<!-- JUnit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Java Compiler Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.11.0</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
`
Step 3: Create Database Configuration File
This file contains database and Hibernate configuration properties.
# Database Properties
db.driver=org.h2.Driver
db.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
db.username=sa
db.password=sa# Hibernate Properties
hibernate.hbm2ddl.auto=create-drop
hibernate.dialect=org.hibernate.dialect.H2Dialect
Step 4: Configure Hibernate and DataSource
Create a configuration class to wire the details for hibernate and set up the session factory etc.
Java `
import org.apache.commons.dbcp2.BasicDataSource; 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.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement;
import javax.sql.DataSource; import java.util.Properties;
@EnableTransactionManagement @Configuration @PropertySource("classpath:db.properties") public class ExampleConfiguration {
@Autowired
private Environment env;
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setPackagesToScan(
new String[]{"com.example"});
sessionFactory.setHibernateProperties(hibernateProperties());
return sessionFactory;
}
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(env.getProperty("db.driver"));
dataSource.setUrl(env.getProperty("db.url"));
dataSource.setUsername(env.getProperty("db.username"));
dataSource.setPassword(env.getProperty("db.password"));
return dataSource;
}
@Bean
public PlatformTransactionManager hibernateTransactionManager() {
HibernateTransactionManager transactionManager
= new HibernateTransactionManager();
transactionManager.setSessionFactory(sessionFactory().getObject());
return transactionManager;
}
private final Properties hibernateProperties() {
Properties hibernateProperties = new Properties();
hibernateProperties.setProperty(
"hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
hibernateProperties.setProperty(
"hibernate.dialect", env.getProperty("hibernate.dialect"));
return hibernateProperties;
}}
`
Step 5: Create Entity Class
Create a User entity that maps to the database table.
Java `
package example.model;
import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;
import javax.persistence.*;
@AllArgsConstructor @NoArgsConstructor @Data @Entity @Table(name = "user") public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;}
`
Step 6: Create Repository Class
The persistence layer to persist the model in the database
Java `
package example.repository;
import example.model.User; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository;
@Repository public class UserRepository {
@Autowired
private SessionFactory sessionFactory;
public void addUser(User user) {
sessionFactory.getCurrentSession().save(user);
}
public User getUsers(int id) {
return sessionFactory.getCurrentSession().get(User.class, id);
}}
`
Step 7: Create Service Layer
The service layer acts as a bridge between the Controller and Repository.
Java `
package example.service;
import example.model.User; import example.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
@Service @RequiredArgsConstructor public class UserService {
@Autowired
private final UserRepository userRepository;
@Transactional
public void addUser(User user) {
userRepository.addUser(user);
}
@Transactional
public User getUser(int id) {
return userRepository.getUsers(id);
}}
`
Step 8: Create Main Application Class
This is the entry point of the application, we need to wire this configuration to the application context.
Java `
package example;
import example.model.User; import example.service.UserService; import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class ExampleApplication { public static void main(String[] args) {
System.out.println("Starting application");
AnnotationConfigApplicationContext context =
new AnnotationConfigApplicationContext(ExampleConfiguration.class);
UserService userService = context.getBean(UserService.class);
// add user to the repo
userService.addUser(new User(1, "john", "doe"));
// search for the user in the repo
User user = userService.getUser(1);
System.out.println(user.toString());
}}
`
Step 9: Run the Application
- Right-click on the file.
- Select Run As - Java Application (Eclipse/STS) or click the Run button (IntelliJ IDEA).
Output:
Hibernate: drop table user if exists
Hibernate: create table user
(
id integer generated by default as identity,
first_name varchar(255),
last_name varchar(255),
primary key (id)
)
Jun 16, 2026 3:44:14 PM org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator initiateService
INFO: HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
Hibernate: insert into user
(id, first_name, last_name)
values (null, ?, ?)
Hibernate: select
user0_.id as id1_0_0_,user0_.first_name as first_na2_0_0_,user0_.last_name as last_nam3_0_0_from user user0_where user0_.id=?
User(id=1, firstName=john, lastName=doe)