STACKJAVA

Code ví dụ truy vấn Hibernate với EntityManger, EntityManagerFactory

Code ví dụ truy vấn Hibernate với EntityManger, EntityManagerFactory

(Xem thêm: Hướng dẫn tự học Hibernate Framework bằng tiếng việt.)

(Xem thêm: Code ví dụ Hibernate truy vấn database với SessionFactory, Session)

(Xem thêm: So sánh sự khác nhau Hibernate Session với EntityManager)

Ở bài này mình sẽ thực hiện sử dụng hibernate kết nối với cơ sở dữ liệu là MySQL để thực hiện truy vấn (thêm, sửa, xóa dữ liệu) với EntityManager

Các công nghệ sử dụng

Tạo database trên MySQL

Trong ví dụ này mình tạo cơ sở dữ liệu ‘hibernate-demo’ với table customer (id, name, address) trong đó id tự tăng.

CREATE DATABASE  IF NOT EXISTS `hibernate-demo`;

CREATE TABLE `hibernate-demo`.`customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

Tạo Maven Project

Thư viện sử dụng

<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>stackjava.com</groupId>
  <artifactId>HibernateEntityManager</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <properties>
    <hibernate.version>5.2.17.Final</hibernate.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>${hibernate.version}</version>
    </dependency>
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>${hibernate.version}</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.46</version>
    </dependency>
  </dependencies>
</project>

File cấu hình hibernate – jpa

Chứa thông tin kết nối tới database (url, username, password), liệt kê các entity class được mapping với các table trong database.

(Trường hợp sử dụng hibernate session thì sẽ sử dụng file hibernate.cfg.xml)

<persistence 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_1.xsd" version="2.1">

  <persistence-unit name="persistence">
    <description>Demo Hibernate Entity Manager</description>
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

    <properties>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
      <property name="javax.persistence.jdbc.url"
        value="jdbc:mysql://localhost:3306/hibernate-entitymanager-demo" />
      <property name="javax.persistence.jdbc.user" value="root" />
      <property name="javax.persistence.jdbc.password" value="admin1234" />
      <property name="hibernate.show_sql" value="true" />
    </properties>
  </persistence-unit>

</persistence>

File entity

package stackjava.com.hibernateentitymanager.entities;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "customer")
public class Customer implements Serializable{
  private static final long serialVersionUID = 1L;

  @Id
  @Column(name = "id")
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private int id;

  @Column(name = "name")
  private String name;

  @Column(name = "address")
  private String address;
  
  // getter - setter

}

File DAO

package stackjava.com.hibernateentitymanager.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import stackjava.com.hibernateentitymanager.entities.Customer;

public class CustomerDAO {
  EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("persistence");
  EntityManager entityManager = entityManagerFactory.createEntityManager();

  public void save(Customer customer) {
    entityManager.getTransaction().begin();
    entityManager.persist(customer);
    entityManager.getTransaction().commit();
  }

  public Customer findById(int id) {
    Customer customer = entityManager.find(Customer.class, id);
    return customer;
  }

  public List<Customer> findAll() {
    return entityManager.createQuery("SELECT c FROM Customer c", Customer.class).getResultList();
  }

  public void delete(Customer customer) {
    entityManager.getTransaction().begin();
    entityManager.remove(customer);
    entityManager.getTransaction().commit();
  }

  public void close() {
    entityManager.close();
    entityManagerFactory.close();
  }
}

Lệnh  Persistence.createEntityManagerFactory(“persistence”); sẽ lấy thông tin từ file META-INF/persistence.xml để tạo đối tượng EntityManagerFactory

Lệnh  entityManager.getTransaction().begin();entityManager.getTransaction().commit(); được dùng để bắt đầu và kết thúc một transaction.

File MainApp.java

package stackjava.com.hibernateentitymanager;

import java.util.List;

import stackjava.com.hibernateentitymanager.dao.CustomerDAO;
import stackjava.com.hibernateentitymanager.entities.Customer;

public class MainApp {
  public static void main(String[] args) {
    CustomerDAO customerDAO = new CustomerDAO();
    customerDAO.save(new Customer("Kai", "Viet Nam"));
    customerDAO.save(new Customer("Thanos", "Viet Nam"));
    customerDAO.save(new Customer("Thor", "Asgard"));
    customerDAO.save(new Customer("Hulk", "USA"));
    customerDAO.save(new Customer("Iron Man", "USA"));
    
    System.out.println("all customer after insert:");
    List<Customer> listCustomer = customerDAO.findAll();
    listCustomer.forEach(c -> {
      System.out.println(c.getName());
    });

    customerDAO.close();
  }
}

Thực hiện insert vào database 5 đối tượng customer sau đó đọc tất cả các customer có trong database và in ra.

Demo

Code ví dụ truy vấn Hibernate với EntityManger, EntityManagerFactory stackjava.com

Okay, Done!

Download code ví dụ trên tại đây.

 

References:

https://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html_single/

https://www.journaldev.com/17379/jpa-entitymanager-hibernate