CHUYÊN ĐỀ JAVA

GIỚI THIỆU HIBERNATE

hoanganhis@gmail.com

Nguyễn Hoàng Anh Email: nhanh@fit.hcmus.edu.vn ĐH KHTN, 2011

Upload by Cafeitvn.com

Nội dung trình bày

 Giới thiệu Hibernate

 Xây dựng ứng dụng quản lý sinh viên đơn giản với

Hibernate

– Lấy danh sách sinh viên

– Lấy thông tin sinh viên

– Thêm sinh viên

– Cập nhật sinh viên

– Xóa sinh viên

Upload by Cafeitvn.com

2

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Hibernate

 Cơ sở dữ liệu thường được thiết kế và lưu trữ theo

hướng quan hệ.

 Tuy nhiên phần mềm thường được xây dựng theo

hướng đối tượng.

 Đối với lập trình viên khi xây dựng phần mềm thường muốn làm việc với các đối tượng và không phải nhớ đến các dòng , các cột trong các bảng của cơ sở dữ liệu.

Upload by Cafeitvn.com

3

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Cài đặt

Upload by Cafeitvn.com

4

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Kiến trúc Hibernate

Code

Mappings

Hibernate

Configuaration

JDBC

POJOs

DATABASE

Upload by Cafeitvn.com

5

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Các bước sử dụng hibernate

 Bước 1: Tạo cơ sở dữ liệu

 Bước 2: Tạo các POJO

 Bước 3: Tạo file cấu hình hibernate.cfg.xml

 Bước 4: Tạo các file mapping .hbm.xml

 Bước 5: Khai báo các file mapping vào hibernate.cfg.xml

 Bước 6: Xây dựng lớp HibernateUtil

 Bước 7: Xây dựng các DAO & Sử dụng

Upload by Cafeitvn.com

6

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 1: Tạo cơ sở dữ liệu

CSDL: MySQL QuanLySinhVien

Upload by Cafeitvn.com

7

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 2: Tạo POJO SinhVien

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package pojo; import java.util.Date; public class SinhVien implements java.io.Serializable { private String maSinhVien; private String hoVaTen; private Date ngaySinh; private String diaChi; public SinhVien() { } public SinhVien(String maSinhVien) { this.maSinhVien = maSinhVien; } public SinhVien(String maSinhVien, String hoVaTen, Date ngaySinh, String diaChi) { this.maSinhVien = maSinhVien; this.hoVaTen = hoVaTen; this.ngaySinh = ngaySinh; this.diaChi = diaChi; }

Upload by Cafeitvn.com

8

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 2: Tạo POJO SinhVien

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public String getMaSinhVien() { return this.maSinhVien; } public void setMaSinhVien(String maSinhVien) { this.maSinhVien = maSinhVien; } public String getHoVaTen() { return this.hoVaTen; } public void setHoVaTen(String hoVaTen) { this.hoVaTen = hoVaTen; } public Date getNgaySinh() { return this.ngaySinh; } public void setNgaySinh(Date ngaySinh) { this.ngaySinh = ngaySinh; } public String getDiaChi() { return this.diaChi; } public void setDiaChi(String diaChi) { this.diaChi = diaChi; } }

Upload by Cafeitvn.com

9

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 3: Tạo file cấu hình hibernate.cfg.xml

. . .

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Upload by Cafeitvn.com

10

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 3: Tạo file cấu hình hibernate.cfg.xml

org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/QuanLySinhVien?autoReconnect& useUnicode=true&characterEncoding=UTF-8 root root

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Upload by Cafeitvn.com

11

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 4: Tạo các file mapping SinhVien.hbm.xml

...

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Upload by Cafeitvn.com

12

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 4: Tạo file mapping SinhVien.hbm.xml

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Upload by Cafeitvn.com

13

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 5: Khai báo mapping vào hibernate.cfg.xml

1 2 3 4 5 6 7 8 9 10 11 12 ...

Upload by Cafeitvn.com

14

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 6: Xây dựng lớp HibernateUtil

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.SessionFactory; public class HibernateUtil { private static final SessionFactory sessionFactory; static { try { sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); } catch (Throwable ex) { System.err.println("Initial SessionFactory creation failed." + ex); throw new ExceptionInInitializerError(ex); } } public static SessionFactory getSessionFactory() { return sessionFactory; } }

Upload by Cafeitvn.com

15

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class SinhVienDAO { public static List layDanhSachSinhVien() { List ds = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { String hql = "select sv from SinhVien sv"; Query query = session.createQuery(hql); ds = query.list(); } catch (HibernateException ex) { //Log the exception System.err.println(ex); } finally { session.close(); } return ds; } . . .

Upload by Cafeitvn.com

16

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public class Main { public static void main(String[] args) { // List ds=SinhVienDAO.layDanhSachSinhVien(); for(int i=0; i

Upload by Cafeitvn.com

17

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public class SinhVienDAO { public static SinhVien layThongTinhSinhVien(String maSinhVien) { SinhVien sv = null; Session session = HibernateUtil.getSessionFactory() .openSession(); try { sv = (SinhVien) session.get(SinhVien.class, maSinhVien); } catch (HibernateException ex) { //Log the exception System.err.println(ex); } finally { session.close(); } return sv; } . . .

Upload by Cafeitvn.com

18

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class Main { public static void main(String[] args) { // SinhVien sv = SinhVienDAO.layThongTinSinhVien("0312143"); if(sv!=null){ System.out.println("MSSV: " + sv.getMaSinhVien()); System.out.println("Họ và tên: " + sv.getHoVaTen()); System.out.println("Ngày sinh: " + sv.getNgaySinh()); System.out.println("Địa chỉ: " + sv.getDiaChi()); }else{ System.out.println("Sinh viên 0312143 không tồn tại"); } //

Upload by Cafeitvn.com

19

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

public class SinhVienDAO { public static boolean themSinhVien(SinhVien sv) { Session session = HibernateUtil.getSessionFactory().openSession(); if (SinhVienDAO.layThongTinSinhVien(sv.getMaSinhVien())!=null) { return false; } Transaction transaction = null; try { transaction = session.beginTransaction(); session.save(sv); transaction.commit(); } catch (HibernateException ex) { //Log the exception transaction.rollback(); System.err.println(ex); } finally { session.close(); } return true; }

Upload by Cafeitvn.com

20

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public class Main { public static void main(String[] args) { // SinhVien sv = new SinhVien(); sv.setMaSinhVien("0312171"); sv.setHoVaTen("Tạ Tấn Thêm"); Calendar calendar = Calendar.getInstance(); calendar.set(1985, 5, 18); Date d = calendar.getTime(); sv.setNgaySinh(d); sv.setDiaChi("Vũng Liêm – Vĩnh Long"); boolean kq = SinhVienDAO.themSinhVien(sv); if (kq == true) { System.out.println("Thêm thành công"); } else { System.out.println("Thêm thất bại"); } //

Upload by Cafeitvn.com

21

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

public class SinhVienDAO { public static boolean capNhatThongTinSinhVien(SinhVien sv) { Session session = HibernateUtil.getSessionFactory().openSession(); if (SinhVienDAO.layThongTinSinhVien(sv.getMaSinhVien()) == null) { return false; } Transaction transaction = null; try { transaction = session.beginTransaction(); session.update(sv); transaction.commit(); } catch (HibernateException ex) { //Log the exception transaction.rollback(); System.err.println(ex); } finally { session.close(); } return true; } . . .

Upload by Cafeitvn.com

22

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

public class Main { public static void main(String[] args) { // SinhVien sv = SinhVienDAO.layThongTinSinhVien("0312143"); if (sv != null) { sv.setHoVaTen("Tạ Tấn Thêm"); Calendar calendar = Calendar.getInstance(); calendar.set(1985, 5, 18); Date d = calendar.getTime(); sv.setNgaySinh(d); sv.setDiaChi("Vũng Liêm – Vĩnh Long"); boolean kq = SinhVienDAO.capNhatThongTinSinhVien(sv); if (kq == true) { System.out.println("Cập nhật thành công"); } else { System.out.println("Cập nhật thất bại"); } } //

Upload by Cafeitvn.com

23

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

public class SinhVienDAO { public static boolean xoaSinhVien(String maSinhVien) { Session session = HibernateUtil.getSessionFactory().openSession(); SinhVien sv = SinhVienDAO.layThongTinSinhVien(maSinhVien); if(sv==null){ return false; } Transaction transaction = null; try { transaction = session.beginTransaction(); session.delete(sv); transaction.commit(); } catch (HibernateException ex) { //Log the exception transaction.rollback(); System.err.println(ex); } finally { session.close(); } return true; } }

Upload by Cafeitvn.com

24

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Bước 7 : Xây dựng lớp SinhVienDAO & sử dụng

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public class Main { public static void main(String[] args) { // boolean kq = SinhVienDAO.xoaSinhVien("0312143"); if (kq == true) { System.out.println("Xóa thành công"); } else { System.out.println("Xóa thất bại"); } } // } }

Upload by Cafeitvn.com

25

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

Tài liệu tham khảo

 Nguyễn Hoàng Anh, Tập bài giảng và video môn

chuyên đề Java, 2010

 Marty Hall, Tập bài giảng về Servlet, 2010

– http://courses.coreservlets.com/Course-Materials/csajsp2.html

Upload by Cafeitvn.com

26

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011

HỎI VÀ ĐÁP

Upload by Cafeitvn.com

27

Nguyễn Hoàng Anh – nhanh@fit.hcmus.edu.vn – ĐH KHTN - 2011