Hiển thị các bài đăng có nhãn orm. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn orm. Hiển thị tất cả bài đăng

Thứ Ba, 15 tháng 10, 2013

Ví dụ đơn giản về Hibernate

Xây dựng ví dụ đơn giản với Hibernate, bao gồm các file sau:
 - hibernate.cfg.xml để cấu hình hibernate như chuỗi kết nối, mapping...
 - HibernateUtils để tạo và quản lý SessionFactory cho ứng dụng
- Class java POJO gồm properties và getter, setter đại diện cho table trong chương trình java
 - File mapping lớp java trên với table trong DB, có đuôi là hbm.xml. Cụ thể đây là file Product.hbm.xml
 - cuối cùng là lớp Main dùng để chạy chươn trình. Câu lệnh sql:
CREATE TABLE PRODUCT(
ID INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(50)  NOT NULL,
PRICE INT NOT NULL,
PRIMARY KEY(ID)
)
Tạo dự án maven với các dependencies sau:

    
      mysql
      mysql-connector-java
      5.1.20
      compile
    
    
      org.hibernate
      hibernate-core
      4.0.1.Final
      compile
    
    
      org.slf4j
      slf4j-api
      1.6.4
      compile
    
    
      org.hibernate
      hibernate-entitymanager
      4.0.1.Final
      compile
    
  
vào phần src/main/resources tạo file cấu hình cho hibernate như sau: hibernate.cfg.xml
        

  
  
    
   com.mysql.jdbc.Driver
   jdbc:mysql://localhost:3306/abc
   root
   
    
    
    1
    
        
    org.hibernate.dialect.MySQLDialect
    
    
    thread
    
    
    org.hibernate.cache.NoCacheProvider
    
    
    false
    validate
    
    
    
    
  

tạo class HibernateUtils có nhiệm vụ tạo ra một SessionFactory quản lý các session chung cho toàn bộ ứng dụng, lưu ý ở đây ta tạo biến private static SESSION_FACTORY và sử dụng phương thức getSessionFactory để chắc chắn rằng tại mọi thời điểm chỉ có 1 đối tượng SessionFactory được tạo ra.

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
 private static SessionFactory SESSION_FACTORY;

 public static SessionFactory getSessionFactory() {
  if (SESSION_FACTORY == null) {
   Configuration configuration = new Configuration();
   SESSION_FACTORY = configuration.configure().buildSessionFactory();
  }
  return SESSION_FACTORY;
 }
}

tạo lớp Product (POJO,Bean..) trong package domain gồm các thuộc tính và setter, getter



public class Product {
 private int id;
 private String name;
 private int price;

 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public int getPrice() {
  return price;
 }

 public void setPrice(int price) {
  this.price = price;
 }
 
 @Override
 public String toString() {
  return "Product[id: " + id + " name: " + name + " price: " + price + "]";
 }

}

tạo file mapping class Product thành bảng PRODUCT trong database: Product.hbm.xml lưu ý package trong mapping

 
  
  
    
 


Cuối cùng là phương thức main để test

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import vn.ds.domain.Product;
import vn.ds.util.HibernateUtils;

public class ProductController {
 public void save(Product product) {
  SessionFactory sf = HibernateUtils.getSessionFactory();
  Session session = sf.openSession();
  session.beginTransaction();
  session.save(product);  
  session.getTransaction().commit();
  session.close();  
 }
 public void update(Product product) {
  SessionFactory sf = HibernateUtils.getSessionFactory();
  Session session = sf.openSession();
  session.beginTransaction();
  session.update(product);  
  session.getTransaction().commit();
  session.close();
 }
 public List read(){
  SessionFactory sf = HibernateUtils.getSessionFactory();
  Session session = sf.openSession();
  List emps = session.createQuery("from Product").list();  
  session.close();
  return emps;
 }
 public static void main(String[] args) {
  ProductController pc = new ProductController();
  ArrayList products = (ArrayList) pc.read();
  for(Product p : products) {
   System.out.println(p.toString());
  }
 }
}