Hibernate Tutorial
Core Hibernate
Hibernate Mapping
Hibernate Annotations
Hibernate with Spring Framework
Hibernate with Database
Hibernate Log4j
Inheritance Mapping
Let's walk through a simple example of setting up a Hibernate project with JPA (Java Persistence API) and MySQL.
Dependencies: You'll need the following Maven dependencies:
<!-- MySQL JDBC Driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> <!-- Use the latest version --> </dependency> <!-- Hibernate ORM and JPA --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.5.6.Final</version> <!-- Use the latest version --> </dependency> <!-- JPA API --> <dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version> </dependency>
Let's create a simple Book
entity.
@Entity @Table(name = "book") public class Book { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "title") private String title; @Column(name = "author") private String author; // Constructors, getters, setters... }
Create a persistence.xml
file under src/main/resources/META-INF/
.
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd"> <persistence-unit name="book_pu"> <!-- Entity classes --> <class>com.example.Book</class> <!-- Provider and DataSource --> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <properties> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/> <property name="hibernate.hbm2ddl.auto" value="update"/> <property name="hibernate.show_sql" value="true"/> <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/> <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test_db"/> <property name="javax.persistence.jdbc.user" value="root"/> <property name="javax.persistence.jdbc.password" value="password"/> </properties> </persistence-unit> </persistence>
Note: Update the database connection details (URL, user, password) as per your MySQL setup.
You can perform CRUD operations using the EntityManager
.
public class BookService { private EntityManagerFactory emf = Persistence.createEntityManagerFactory("book_pu"); private EntityManager em = emf.createEntityManager(); public Book addBook(String title, String author) { Book book = new Book(); book.setTitle(title); book.setAuthor(author); em.getTransaction().begin(); em.persist(book); em.getTransaction().commit(); return book; } public Book findBook(Long id) { return em.find(Book.class, id); } // You can add update and delete methods in a similar fashion. }
Here's a simple main class to add a book:
public class Main { public static void main(String[] args) { BookService bookService = new BookService(); Book book = bookService.addBook("Hibernate in Action", "Christian Bauer"); System.out.println("Book ID: " + book.getId()); Book foundBook = bookService.findBook(book.getId()); System.out.println("Found Book Title: " + foundBook.getTitle()); } }
When you run this, Hibernate will interact with MySQL using JPA, creating the book
table (if it doesn't exist) and adding a new entry.
Remember, this is a basic example to get you started. In a real-world scenario, you'd integrate dependency injection, handle exceptions, and potentially integrate with a framework like Spring.
Hibernate JPA configuration with MySQL:
persistence.xml
file to set up the JPA configuration, including the database connection details for MySQL.<!-- persistence.xml --> <persistence-unit name="example-unit" transaction-type="RESOURCE_LOCAL"> <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> <properties> <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver"/> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/your_database"/> <property name="hibernate.connection.username" value="your_username"/> <property name="hibernate.connection.password" value="your_password"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <!-- other properties --> </properties> </persistence-unit>
Creating entities for Hibernate JPA with MySQL:
@Entity
, @Table
, @Id
, etc.@Entity @Table(name = "employee") public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String firstName; private String lastName; // Getters and setters }
Mapping relationships in Hibernate JPA with MySQL:
@ManyToOne
, @OneToMany
, etc., to map relationships between entities in MySQL.@Entity @Table(name = "department") public class Department { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @OneToMany(mappedBy = "department") private List<Employee> employees; // Getters and setters }
Hibernate JPA query examples for MySQL:
// JPQL example TypedQuery<Employee> query = entityManager.createQuery("SELECT e FROM Employee e WHERE e.firstName = :firstName", Employee.class); query.setParameter("firstName", "John"); List<Employee> employees = query.getResultList();