This tutorial shows how to create a step-by-step Hibernate application to perform CRUD operations against the database. In this example, we use Eclipse IDE, Maven as a project management and build tool, and MySQL as a database.
We also use Hibernate Java-based configuration and JPA annotations to create a JPA entity.
We also use Hibernate Java-based configuration and JPA annotations to create a JPA entity.
Technologies and tools used
- Hibernate 6.1.7.Final
- IDE - Eclipse
- Maven 3.5.3
- JavaSE 17
- MySQL - 8.0.32
Development Steps
- Create a Simple Maven Project
- Project Directory Structure
- Add jar Dependencies to pom.xml
- Creating the JPA Entity Class(Persistent class)
- Create a Hibernate configuration file - Java Configuration
- Create a Student class
- Create the Main class and Run an Application
Let's start developing step by step Hibernate application in Eclipse using Maven as a project management and build tool.
1. Create a Simple Maven Project
Use the How to Create a Simple Maven Project in Eclipse article to create a simple Maven project in Eclipse IDE.
3. Add jar Dependencies to pom.xml
Let's add MySQL and hibernate-core dependencies to the below 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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.javaguides</groupId>
<artifactId>hibernate-crud-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Hibernate CRUD Example</name>
<description>Hibernate CRUD Example</description>
<dependencies>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>6.1.7.Final</version>
</dependency>
</dependencies>
</project>
4. Creating the JPA Entity Class(Persistent class)
Let's create a Student persistent class that is mapped to a student database table:
import jakarta.persistence.*;
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.Auto)
@Column(name = "id")
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
private String email;
public Student() {
}
public Student(String firstName, String lastName, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "Student [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + "]";
}
}
5. Create a Hibernate configuration file - Java Configuration
The HibernateUtil Java configuration file contains information about the database and mapping file.
Let's create a HibernateUtil file and write the following code in it.
package net.javaguides.hibernate.util; import java.util.Properties; import org.hibernate.SessionFactory; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.cfg.Environment; import org.hibernate.service.ServiceRegistry; import net.javaguides.hibernate.model.Student; public class HibernateUtil { private static SessionFactory sessionFactory; public static SessionFactory getSessionFactory() { if (sessionFactory == null) { try { Configuration configuration = new Configuration(); // Hibernate settings equivalent to hibernate.cfg.xml's properties Properties settings = new Properties(); settings.put(Environment.DRIVER, "com.mysql.cj.jdbc.Driver"); settings.put(Environment.URL, "jdbc:mysql://localhost:3306/hibernate_db?useSSL=false"); settings.put(Environment.USER, "root"); settings.put(Environment.PASS, "root"); settings.put(Environment.SHOW_SQL, "true"); settings.put(Environment.CURRENT_SESSION_CONTEXT_CLASS, "thread"); settings.put(Environment.HBM2DDL_AUTO, "create-drop"); configuration.setProperties(settings); configuration.addAnnotatedClass(Student.class); ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder() .applySettings(configuration.getProperties()).build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } catch (Exception e) { e.printStackTrace(); } } return sessionFactory; } }
6. Create IStudentDao Interface and StudentDao Impl Class
Let's create a separate IStudentDao interface with the following methods:
package net.javaguides.hibernate.dao; import java.util.List; import net.javaguides.hibernate.model.Student; public interface IStudentDao { void saveStudent(Student student); void updateStudent(Student student); Student getStudentById(long id); List<Student> getAllStudents(); void deleteStudent(long id); }
Let's create StudentDao class that implements the above IStudentDao interface:
package net.javaguides.hibernate.dao; import java.util.List; import jakarta.transaction.Transactional; import org.hibernate.Session; import org.hibernate.Transaction; import net.javaguides.hibernate.model.Student; import net.javaguides.hibernate.util.HibernateUtil; public class StudentDao implements IStudentDao { // save Student // get All Students // get Student By Id // Update Student // Delete Student /* (non-Javadoc) * @see net.javaguides.hibernate.dao.IStudentDao#saveStudent(net.javaguides.hibernate.model.Student) */ @Override public void saveStudent(Student student) { Transaction transaction = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) { // start the transaction transaction = session.beginTransaction(); // save student object session.save(student); // commit the transaction transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } } } /* (non-Javadoc) * @see net.javaguides.hibernate.dao.IStudentDao#updateStudent(net.javaguides.hibernate.model.Student) */ @Override public void updateStudent(Student student) { Transaction transaction = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) { // start the transaction transaction = session.beginTransaction(); // save student object session.saveOrUpdate(student); // commit the transaction transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } } } /* (non-Javadoc) * @see net.javaguides.hibernate.dao.IStudentDao#getStudentById(long) */ @Override public Student getStudentById(long id) { Transaction transaction = null; Student student = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) { // start the transaction transaction = session.beginTransaction(); // get student object student = session.get(Student.class, id); //student = session.load(Student.class, id); // commit the transaction transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } } return student; } /* (non-Javadoc) * @see net.javaguides.hibernate.dao.IStudentDao#getAllStudents() */ @Override @SuppressWarnings("unchecked") public List < Student > getAllStudents() { Transaction transaction = null; List < Student > students = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) { // start the transaction transaction = session.beginTransaction(); // get students students = session.createQuery("from Student").list(); //student = session.load(Student.class, id); // commit the transaction transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } } return students; } /* (non-Javadoc) * @see net.javaguides.hibernate.dao.IStudentDao#deleteStudent(long) */ @Override public void deleteStudent(long id) { Transaction transaction = null; Student student = null; try (Session session = HibernateUtil.getSessionFactory().openSession()) { // start the transaction transaction = session.beginTransaction(); student = session.get(Student.class, id); // get student object session.delete(student); //student = session.load(Student.class, id); // commit the transaction transaction.commit(); } catch (Exception e) { if (transaction != null) { transaction.rollback(); } } } }
7. Create the Main App class and Run an Application
Let's test the Hibernate application to connect the MySQL database with CRUD operations:
package net.javaguides.hibernate; import java.util.List; import net.javaguides.hibernate.dao.IStudentDao; import net.javaguides.hibernate.dao.StudentDao; import net.javaguides.hibernate.model.Student; public class App { public static void main(String[] args) { IStudentDao studentDao = new StudentDao(); // test saveStudent Student student = new Student("Ramesh", "Fadatare", "ramesh@gmail.com"); studentDao.saveStudent(student); // test updateStudent student.setFirstName("Ram"); studentDao.updateStudent(student); // test getStudentById Student student2 = studentDao.getStudentById(student.getId()); // test getAllStudents List < Student > students = studentDao.getAllStudents(); students.forEach(student1 - > System.out.println(student1.getId())); // test deleteStudent studentDao.deleteStudent(student.getId()); } }
Once you run this class will produce below output in console:
Comments
Post a Comment
Leave Comment