Hibernate has been used with spring for as long as I can remember. Now that spring boot and spring data have taken the game by storm spring boot with hibernate are no longer relevant. But just in case you are not too familiar with Spring data or you want to keep using hibernate the old school way. Here is how you can use hibernate with spring boot.
Step 1 – Create a spring boot project using spring initializr and make sure you include these dependencies.
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> </dependency> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> </dependency>
Step 2 – Configure hibernate using java
@Configuration @EnableTransactionManagement public class HibernateConfig { @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setHibernateProperties(hibernateProperties()); sessionFactory.setAnnotatedClasses(User.class, Role.class, Address.class); return sessionFactory; } private final Properties hibernateProperties() { final Properties hibernateProperties = new Properties(); hibernateProperties.setProperty("hibernate.hbm2ddl.auto", "create"); hibernateProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect"); hibernateProperties.setProperty("hibernate.show_sql", "true"); hibernateProperties.setProperty("hibernate.format_sql", "true"); return hibernateProperties; } @Bean public DataSource dataSource() { Integer port = 3306; String host = "localhost"; String username = "root"; String password = ""; String dbName = "spring_boot_hibernate"; String url = "jdbc:mysql://" + host + ":" + port + "/" + dbName + "?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC"; return DataSourceBuilder.create().password(password).username(username).url(url).type(HikariDataSource.class) .build(); } @Bean public PlatformTransactionManager hibernateTransactionManager() { HibernateTransactionManager transactionManager = new HibernateTransactionManager(); transactionManager.setSessionFactory(sessionFactory().getObject()); return transactionManager; } }
If you using a hibernate xml file, you can simply just import to your java hibernate class.
@Configuration @EnableTransactionManagement @ImportResource({"classpath:hibernateConfiguration.xml"}) public class HibernateConfig { // }
Step 3 – Create a DAO class for accessing the database.
@Repository public class UserDAO { private Logger log = LoggerFactory.getLogger(this.getClass()); @Autowired private SessionFactory sessionFactory; public User saveAndFlush(User user) { log.debug("saveAndFlush(..)"); Session session = sessionFactory.openSession(); Transaction transaction = session.getTransaction(); transaction.begin(); Object id = session.save(user); transaction.commit(); session.close(); log.debug("id={}",ObjectUtils.toJson(id)); user.setId((long)id); return user; } public User update(User user) { log.debug("update(..)"); Session session = sessionFactory.openSession(); Transaction transaction = session.getTransaction(); transaction.begin(); session.update(user); transaction.commit(); session.close(); return this.getById(user.getId()); } public User getById(Long memberId) { Session session = sessionFactory.openSession(); return session.get(User.class, memberId); } }
Just like that and you back in business with spring boot and hibernate. Springboot makes you life as a developer so much easier.