

Spring boot comes with easy ways to configure hibernate. Here is Spring boot hibernate example with MySQL and Hibernate ORM. Spring also provides easy ways to configure hibernate using JTA but some time we like ORM for hibernate to Query and Connection Management so here is a complete example of Spring boot hibernate.

Spring boot hibernate example
Table of Contents
pom.xml
spring-boot-starter-data-jpa
dependency contains all jar related hibernate ORM connections like SessionFactory
& TransactionManager
ect. So we do not require any other dependency.
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>spring-boot-example</groupId> <artifactId>spring-boot-hibernate-example</artifactId> <version>1.0-SNAPSHOT</version> <description>Spring boot hibernate example</description> <!-- Inherit defaults from Spring Boot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> </parent> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> </dependencies> <!-- Package as an executable jar --> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.properties
application.properties
file contains properties related to the database connection. Please note that spring.datasource.*
indicates database related properties. spring.datasource.*
contains properties related to database connection URL, database username, database password and database driver class. If name like spring.datasource.*
then spring automatically identify that application requires database connection so it will create DataSource
object which can be used while providingDataSource
to hibernate.
spring.datasource.url=jdbc:mysql://localhost/demo_database spring.datasource.username=root spring.datasource.password= spring.datasource.driver-class-name=com.mysql.jdbc.Driver hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.show_sql=false hibernate.format_sql=false
HibernateConfig
package com.javadeveloperzone; 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.core.env.Environment; import org.springframework.orm.hibernate5.HibernateTransactionManager; import org.springframework.orm.hibernate5.LocalSessionFactoryBean; import org.springframework.transaction.annotation.EnableTransactionManagement; import javax.sql.DataSource; import java.util.Properties; /** * Created by Java Developer Zone on 25-08-2017. */ @Configuration @EnableTransactionManagement public class HibernateConfig { @Autowired private Environment environment; @Autowired private DataSource dataSource; // It will automatically read database properties from application.properties and create DataSource object @Autowired @Bean(name = "sessionFactory") public LocalSessionFactoryBean getSessionFactory() { // creating session factory LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource); sessionFactory.setPackagesToScan(new String[]{"com.javadeveloperzone.model"}); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } private Properties hibernateProperties() { // configure hibernate properties 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", "update"); return properties; } @Autowired @Bean(name = "transactionManager") // creating transaction manager factory public HibernateTransactionManager getTransactionManager( SessionFactory sessionFactory) { HibernateTransactionManager transactionManager = new HibernateTransactionManager( sessionFactory); return transactionManager; } }
SpringBootConfig
package com.javadeveloperzone; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; /** * Created by Java Developer Zone on 19-07-2017. */ @SpringBootApplication @ComponentScan // Using a root package also allows the @ComponentScan annotation to be used without needing to specify a basePackage attribute public class SpringBootConfig { public static void main(String[] args) throws Exception { SpringApplication.run(SpringBootConfig.class, args); // it wil start application } }
Employee
package com.javadeveloperzone.model; import javax.persistence.*; /** * Created by Java Developer Zone on 03-08-2017. */ @Entity @Table public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int employeeId; @Column private String employeeName; @Column private String employeeRole; public int getEmployeeId() { return employeeId; } public void setEmployeeId(int employeeId) { this.employeeId = employeeId; } public String getEmployeeRole() { return employeeRole; } public void setEmployeeRole(String employeeRole) { this.employeeRole = employeeRole; } public String getEmployeeName() { return employeeName; } public void setEmployeeName(String employeeName) { this.employeeName = employeeName; } }
EmployeeDAO
package com.javadeveloperzone.dao; import com.javadeveloperzone.model.Employee; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * Created by Java Developer Zone on 03-08-2017. */ @Component @Transactional public class EmployeeDAO { @Autowired private SessionFactory sessionFactory; public java.util.List<Employee> getEmployeeList() { return sessionFactory.getCurrentSession().createCriteria(Employee.class).list(); } }
EmployeeController
package com.javadeveloperzone.controller; import com.javadeveloperzone.dao.EmployeeDAO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * Created by Java Developer Zone on 19-07-2017. */ @RestController public class EmployeeController { @Autowired private EmployeeDAO employeeDAO; @RequestMapping("/getEmployeeList") public java.util.List getEmployeeList() { return employeeDAO.getEmployeeList(); } }
MySQL Database

Spring boot hibernate example MySQL database
Build Application
Connected to the target VM, address: '127.0.0.1:65115', transport: 'socket' . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.5.4.RELEASE) 2017-09-02 22:48:53.543 INFO 80012 --- [ main] com.javadeveloperzone.SpringBootConfig : Starting SpringBootConfig on Mahesh with PID 80012 (F:\extrawork\spring-boot\spring-boot-hibernat-example\target\classes started by Lenovo in F:\extrawork\spring-boot\spring-boot-hibernat-example) 2017-09-02 22:48:53.559 INFO 80012 --- [ main] com.javadeveloperzone.SpringBootConfig : No active profile set, falling back to default profiles: default 2017-09-02 22:48:53.637 INFO 80012 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@55740540: startup date [Sat Sep 02 22:48:53 IST 2017]; root of context hierarchy 2017-09-02 22:48:57.141 INFO 80012 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http) 2017-09-02 22:48:57.157 INFO 80012 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat] 2017-09-02 22:48:57.157 INFO 80012 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.5.15 2017-09-02 22:48:57.266 INFO 80012 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext 2017-09-02 22:48:57.266 INFO 80012 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 3645 ms 2017-09-02 22:48:57.438 INFO 80012 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/] 2017-09-02 22:48:57.454 INFO 80012 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*] 2017-09-02 22:48:57.454 INFO 80012 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*] 2017-09-02 22:48:57.454 INFO 80012 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*] 2017-09-02 22:48:57.454 INFO 80012 --- [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*] 2017-09-02 22:48:58.204 INFO 80012 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default' 2017-09-02 22:48:58.220 INFO 80012 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [ name: default ...] 2017-09-02 22:48:58.313 INFO 80012 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.0.12.Final} 2017-09-02 22:48:58.313 INFO 80012 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found 2017-09-02 22:48:58.313 INFO 80012 --- [ main] org.hibernate.cfg.Environment : HHH000021: Bytecode provider name : javassist 2017-09-02 22:48:58.376 INFO 80012 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final} 2017-09-02 22:48:58.533 INFO 80012 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect 2017-09-02 22:48:58.571 INFO 80012 --- [ main] o.h.e.j.e.i.LobCreatorBuilderImpl : HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 2017-09-02 22:48:59.054 INFO 80012 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2017-09-02 22:48:59.101 INFO 80012 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect 2017-09-02 22:48:59.116 INFO 80012 --- [ main] o.h.e.j.e.i.LobCreatorBuilderImpl : HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4 2017-09-02 22:48:59.134 INFO 80012 --- [ main] org.hibernate.tool.hbm2ddl.SchemaUpdate : HHH000228: Running hbm2ddl schema update 2017-09-02 22:48:59.150 INFO 80012 --- [ main] rmationExtractorJdbcDatabaseMetaDataImpl : HHH000262: Table not found: Employee 2017-09-02 22:48:59.150 INFO 80012 --- [ main] rmationExtractorJdbcDatabaseMetaDataImpl : HHH000262: Table not found: Employee 2017-09-02 22:48:59.478 INFO 80012 --- [ main] o.s.o.h.HibernateTransactionManager : Using DataSource [org.apache.tomcat.jdbc.pool.DataSource@435e60ff{ConnectionPool[defaultAutoCommit=null; defaultReadOnly=null; defaultTransactionIsolation=-1; defaultCatalog=null; driverClassName=com.mysql.jdbc.Driver; maxActive=100; maxIdle=100; minIdle=10; initialSize=10; maxWait=30000; testOnBorrow=true; testOnReturn=false; timeBetweenEvictionRunsMillis=5000; numTestsPerEvictionRun=0; minEvictableIdleTimeMillis=60000; testWhileIdle=false; testOnConnect=false; password=********; url=jdbc:mysql://localhost/demo_database; username=root; validationQuery=SELECT 1; validationQueryTimeout=-1; validatorClassName=null; validationInterval=3000; accessToUnderlyingConnectionAllowed=true; removeAbandoned=false; removeAbandonedTimeout=60; logAbandoned=false; connectionProperties=null; initSQL=null; jdbcInterceptors=null; jmxEnabled=true; fairQueue=true; useEquals=true; abandonWhenPercentageFull=0; maxAge=0; useLock=false; dataSource=null; dataSourceJNDI=null; suspectTimeout=0; alternateUsernameAllowed=false; commitOnReturn=false; rollbackOnReturn=false; useDisposableConnectionFacade=true; logValidationErrors=false; propagateInterruptState=false; ignoreExceptionOnPreLoad=false; useStatementFacade=true; }] of Hibernate SessionFactory for HibernateTransactionManager 2017-09-02 22:49:00.041 INFO 80012 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@55740540: startup date [Sat Sep 02 22:48:53 IST 2017]; root of context hierarchy 2017-09-02 22:49:00.134 INFO 80012 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/getEmployeeList]}" onto public java.util.List com.javadeveloperzone.controller.EmployeeController.getEmployeeList() 2017-09-02 22:49:00.150 INFO 80012 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest) 2017-09-02 22:49:00.150 INFO 80012 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 2017-09-02 22:49:00.197 INFO 80012 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-09-02 22:49:00.197 INFO 80012 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-09-02 22:49:00.259 INFO 80012 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler] 2017-09-02 22:49:00.775 INFO 80012 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 2017-09-02 22:49:00.853 INFO 80012 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) 2017-09-02 22:49:00.853 INFO 80012 --- [ main] com.javadeveloperzone.SpringBootConfig : Started SpringBootConfig in 7.756 seconds (JVM running for 8.559) 2017-09-02 22:50:31.517 INFO 80012 --- [nio-8080-exec-2] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet' 2017-09-02 22:50:31.517 INFO 80012 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started 2017-09-02 22:50:31.542 INFO 80012 --- [nio-8080-exec-2] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 25 ms
Output

Spring boot hibernate example output