hibernate tung trung dh07dt

70
GVHD: TS.Phạm Văn Tính SVTH: Lê Nhật Tùng Đoàn Bảo

Upload: tung-xeng

Post on 08-Apr-2015

340 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Hibernate Tung Trung DH07DT

GVHD: TS.Phạm Văn TínhSVTH: Lê Nhật Tùng Đoàn Bảo Trung

Page 2: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 2/24

1. Giới thiệu về Hibernate1. Giới thiệu về Hibernate

1.1 Định nghĩa Hibernate là một framework cho phép người lập trình liên kết các đối tượng lớp java với thể hiện của chúng trong hệ quản trị cơ sở dữ liệu bắng phương pháp (O/R Mapping). Nó giúp người lập trình làm việc với cơ sở dữ liệu một cách linh hoạt và tiện lợi hơn. Hibernate sử dụng các file mapping .hbm.xml để cấu hình thành bảng dữ liệu trong cơ sở dữ liệu qua đó cung cấp các persistence services cho ứng dụng. Do hỗ trợ annotation trong JDK 1.5 trở lên, Hibernate đã giới thiệu một cách mapping được gọi là Hibernate Annotation.

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 2

Page 3: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 3/24

1. Giới thiệu về Hibernate1. Giới thiệu về Hibernate

1.2 Lợi ích khi áp dụng Hibernate.

Hibernate được sử dụng linh hoạt và phổ biến trong nhiều môi trường khác nhau.

Hibernate ứng dụng trên mọi RDBMS (Hệ quản trị cơ sở dữ liệu): MySQL, Oracle…

Hibernate chỉ thực hiện trên các đối tượng Java thay vì thực hiện trên các bảng của CSDL.

Do thực hiện trên các đối tượng Java nên không cần lo lắng về chi tiết lưu trữ.

Giảm 95% code nếu ta sử dụng Hibernate vì Hibernate dùng bộ xử lý bytecode hoặc mã phát sinh.

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 3

Page 4: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 4/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

2.1 Plugin Hibernate Tool cho hibernate: HibernateTools-3.2.0.GA.rar đây là plugin của hibernate cho Eclipse. (http://tools.hibernate.org). Giải nén file rar copy hai thư mục plugins và features paste vào thư mục chứa file thực thi của Eclipse. Sau đó xóa toàn bộ thư mục cấu hình của Eclipse, chạy Eclipse khi đó Eclipse đã được tích hợp tính năng hibernate.

2.2 Các gói thư viện cần thiết- hibernate3.jar - cglib-2.1.3.jar- hibernate-annotations.jar - commons-collections.jar- ejb3-persistence.jar - commons-logging.jar- jta.jar - dom4j-1.6.1.jar- asm.jar - ehcache-1.2.jar- c3p0-0.9.0.jar - driver cho database mà bạn sử

dụng

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 4

Page 5: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 5/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

2.3 Các thành phần quan trọng- File cấu hình của Hibernate.- File Mapping của Hibernate.hbm.xml.

(Nếu sử dụng Hibernate Annotation thì không cần file này)

- Hibernate 2.0 phải nằm trong thư viện lib.- HQL - ngôn ngữ truy vấn.- Các tập tin lớp Java.- Mô hình cơ sở dữ liệu (sơ đồ lớp, sơ đồ ERD…).

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 5

Page 6: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 6/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

2.4 Import thư viện 2.4.1 Import vào user library - Vào menu Window -> Preferences

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 6

Page 7: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 7/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 7

- Vào Java/Build Path/User Libraries trong khung bên trái- Click button New

Page 8: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 8/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 8

- Nhập vào tên thư viện (có thể đặt tuy ý) rồi click ok.

Page 9: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 9/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 9

- Click vào button Add JARs sau đó chọn các file thư viện cần add.

Page 10: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 10/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 10

Page 11: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 11/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 11

- Click phải vào project và chọn Properties

Page 12: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 12/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 12

- Vào mục Java Build Path và click button Add Library…

Page 13: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 13/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 13

- Chọn User Library và click next.

Page 14: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 14/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 14

- Chọn thư viện mà chúng ta đã tạo ở bước trên, rồi click Finish.

Page 15: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 15/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 15

- Click OK để hoàn tất quá trình import thư viện.

Page 16: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 16/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

2.4.2 Import trưc tiếp vào Project - Tạo một thư mục mới trong project có tên là lib bằng cách

click phải vào project chọn new\folder hoặc vào menu File\new\Folder.

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 16

Page 17: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 17/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 17

Page 18: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 18/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 18

- Copy các file thư viện và past vào thư mục vưa tạo.

Page 19: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 19/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 19

- Click phải vào project chọn Build Path\Add to Build Path.

Page 20: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 20/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

2.5 Hibernate.cfg.xml2.5.1 Cách tạo file Hibernate.cfg.xml

- Click phải vào project rồi chọn New\Other…

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 20

Page 21: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 21/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

- Chọn thư mục Hibernate- Sau đó chọn Hibernate Configuration File (cfg.xml)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 21

Page 22: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 22/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 22

- Bước tiếp theo là đặt tên cho file cấu hình. Bạn nên lấy tên mặc định là hibernate.cfg.xml

Page 23: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 23/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 23

- Bạn hãy điền các thông tin cần thiết vào diaglog.

Page 24: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 24/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 24

Page 25: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 25/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 25

- Dưới đây là file cấu hình vưa tạo xong.

Page 26: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 26/24

2. Cấu hình Hibernate2. Cấu hình Hibernate

2.5.2 Chi tiết cấu hình Hibernate.cfg.xml Cấu hình của Hibernate bao gồm những thuộc tính lưu trữ vào file

hibernate.cfg những thuộc tính đó được sử dụng để kết nối cơ sở dữ liệu và phát sinh mô hình. Trong file có các thuộc tính chủ yếu:<property name=”hibernate.dialect”/> là thuộc tính định nghĩa hệ quản trị cơ

sở cần dùng. Mỗi hệ hệ Quản trị CSDL có một dialect khác nhau. Muốn kết nối RDBMS khác, ta chỉ cần thay đổi Dialect của hệ quản trị CSDL.

<property name=”hibernate.connection.driver_class”/> lớp driver kết nối jdbc.

<property name=”hibernate.connection.url”/> tương tự như JDBC URL<property name=”hibernate.connection.username”/><property name=”hibernate.connection.password”/>Thuôc tính cài đặt

username và password kết nối với CSDL. <property name="hibernate.hbm2ddl.auto“/> Cách thức mapping, tạo mới

hoặc update lên dữ liệu đã có<mapping-resource =””/>: Khai báo các ánh xạ các đối tượng đến nguồn dưới

dạng file.xml. (dùng file XML)<mapping class="" /> Khai báo các ánh xạ các đối tượng đến nguồn bằng

Hibernate Annotation (dùng class trự tiếp).

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 26

Page 27: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 27/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 27

3.1 Giới thiệu:Hibernate Annotation có các đặc điểm sau:

Được viết theo cú pháp của EJB3.Thể hiện metadata ngay trên mã Java bằng chú thích

Annotation, không cần dùng tập tin mapping.Annotation được biên dịch sang dạng bytecode và được kích

hoạt lúc thực thi dùng reflection.HA là một cách ghi chú thích cho một đối tượng hay một

thuộc tính và thông qua đó có đối tượng, thuộc tính đó có thể được hoặc không được lưu xuống CSDL được hỗ trợ java hỗ trợ tư JDK 5.0(1.5).

3.2 Điều kiện để các đối tượng ánh xạ được xuống cơ sở dữ liệu

Phải có contructor rỗng.Phải có các getter, setter tương ứng với các thuộc tính.Các thuộc tính có tư khóa static hoặc @Transient sẽ không

được lưu xuống CSDLPhải được khai báo trong thẻ<mapping/> trong file

hibernate.cfg.xml

Page 28: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 28/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 28

3.2 Một số từ khóa của HA@Entity: đây là tư khóa để khai báo một đối tượng sẽ được

ánh xạ xuống cơ sở dữ liệu.@Table: dùng để khai báo các thuộc tính cho một bảng

(name, constraints).@Inheritance: khai báo cho superclass dùng trong lưu các đối

tượng có quan hệ kế thưa@Id: khai báo một thuộc tính sẽ là khóa chính trong bảng.@Colum: khai báo các thuộc tính liên quan cho một côt trong

bảng.@Transient: quy định cho HA không lưu thuộc tính này xuống

cơ sở dữ liệu@JoinColumn: dùng để khai báo một thuộc tính là khóa ngoại

(reference key)@OneToMany: dùng để khai báo trong quan hệ one to many.@ManyToOne: dùng để khai báo trong quan hệ many to one.@ManyToMany: dùng để khai báo trong quan hệ many to

many.……..

Page 29: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 29/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 29

3.3 Ví dụ đơn giản: Cat@Entitypublic class Cat {

private Integer id;private String name;

public Cat() {} //Constructor rổng bắt buộc phải cópublic Cat(String name) {

this.name = name;}@Id// Khoa chinh@GeneratedValue // Tu dong tang, autonumberpublic Integer getId() {

return id;}public void setId(Integer id) {

this.id = id;}public String getName() {

return name;}public void setName(String name) {

this.name = name;}

}

Phải có getter và setter

Page 30: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 30/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 30

3.3 Ví dụ đơn giản: Cat – file hibernate.cfg.xml

Page 31: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 31/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 31

3.3 Ví dụ đơn giản: Cat – HibernateUtil

public class HibernateUtil {private static final SessionFactory sessionFactory;static {

try {sessionFactory = new AnnotationConfiguration().configure()

.buildSessionFactory();} catch (Throwable ex) {

throw new ExceptionInInitializerError(ex);}

}public static Session getSession() throws HibernateException {

return sessionFactory.openSession();}public static Session getCurrentSession() throws HibernateException {

return sessionFactory.getCurrentSession();}

}

Page 32: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 32/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 32

3.3 Ví dụ đơn giản: Cat – Test

public class Test {

public static void main(String[] args) {

Session session = HibernateUtil.getSession();

org.hibernate.Transaction tr = session.beginTransaction();

Cat cat1 = new Cat("Mimi");

session.save(cat1);

tr.commit();

session.close();

}

}

Page 33: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 33/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 33

3.4 Quan hệCác kiểu quan hệ trong cơ sở dữ liệu:

one-to-oneone-to-manymany-to-onemany-to-many

3.4.1 Quan hệ one-to-oneThể hiện mối quan hệ giữa hai đối tượng, đối tượng thứ nhất

chỉ liên quan hay tham chiếu duy nhất đến đối tượng thứ hai hoặc ngược lại.

Có thể được thể hiện trong cơ sở dữ liệu bằng hai cách: Hai table chứa chung một khóa chính.Sử dụng thêm một table phụ để lưu. Có hai cột lưu giá trị tương ứng với đối tượng thứ nhất là đối tượng thứ hai.

Page 34: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 34/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 34

3.4.2 Quan hệ one-to-manyThể hiện mối quan hệ giữa hai đối tượng, đối tượng thứ nhất

có thể liên quan hay tham chiếu đến nhiều đối tượng thứ hai.

Tư khóa trong HA: @OneToManyTrong đối tượng thứ nhất thường chứa một list hay một set

đối tượng thứ hai và được khai báo @OneToMany.

Ví dụ: Một tác giả viết nhiều quyển sách. Khi đó đối tượng tác giả sẽ chứa một list quyển sách.

Authorname : String

Booktitle : String

1 0..*1 0..*

Page 35: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 35/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 35

3.4.2 Quan hệ one-to-many(tt)

@Entitypublic class Book {

private String title;public Book() {}public Book(String title) {

this.title = title;}@Idpublic String getTitle() {

return title;}public void setTitle(String title) {

this.title = title;}

}

Page 36: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 36/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 36

3.4.2 Quan hệ one-to-many(tt)@Entitypublic class Author {

private List<Book> mybook = new ArrayList<Book>();private String name;

public Author() {}public Author(List<Book> mybook, String name) {

this.mybook = mybook;this.name = name;

}@Idpublic String getName() {

return name;}public void setName(String name) {

this.name = name;}@OneToMany()public List<Book> getMybook() {

return mybook;}public void setMybook(List<Book> mybook) {

this.mybook = mybook;}

}

Page 37: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 37/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 37

3.4.2 Quan hệ one-to-many(tt)

public class Query {public static void save(Author author) {

Session session = HibernateUtil.getSession();Transaction transaction = session.beginTransaction();session.save(author);transaction.commit();session.close();

}public static void save(Book book) {

Session session = HibernateUtil.getSession();Transaction transaction = session.beginTransaction();session.save(book);transaction.commit();session.close();

}}

Page 38: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 38/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 38

3.4.2 Quan hệ one-to-many(tt)

public class Test {public static void main(String[] args) {

Book b1 = new Book("Lap trinh mang 1");Book b2 = new Book("Thiet ke huong doi tuong");Book b3 = new Book("Quan tri mang");Book b4 = new Book("Lap trinh B");Author au1 = new Author("TS.Pham Van Tinh");Author au2 = new Author("ThS.Le Phi Hung");au1.add(b1);au1.add(b3);au2.add(b2);au2.add(b4);Query.save(au1);Query.save(au2);

}}

Page 39: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 39/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 39

3.4.2 Quan hệ one-to-many(tt)Cấu trúc table:

Table authorTable book

Table book_author

Page 40: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 40/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 40

3.4.3 Quan hệ many-to-oneThể hiện mối quan hệ giữa hai đối tượng, nhiều đối tượng

thứ nhất liên quan hay tham chiếu đến một đối tượng thứ hai.

Tư khóa trong HA: @ManyToOneTrong đối tượng thứ nhất sẽ chứa một một đối tượng thứ hai

và được khai báo @OneToMany.

Ví dụ: Một quyển sách do một tác giả viết (tác giả lại có thể viết nhiều quyển sách). Khi đó trong đối tượng quyển sách sẽ chứa một đối tượng tác giả.

Booktitle : String

Authorname : String

11

Page 41: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 41/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 41

3.4.3 Quan hệ many-to-one(tt)

@Entitypublic class Author {

private String name;

public Author() {}public Author(String name) {

this.name = name;}@Idpublic String getName() {

return name;}public void setName(String name) {

this.name = name;}

}

Page 42: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 42/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 42

3.4.3 Quan hệ many-to-one(tt)

@Entitypublic class Book {

private String title;private Author author;public Book() {}public Book(String title, Author author) {

this.title = title;this.author = author;

}@Idpublic String getTitle() {

return title;}public void setTitle(String title) {

this.title = title;}@ManyToOne(cascade = CascadeType.ALL)public Author getAuthor() {

return author;}public void setAuthor(Author author) {

this.author = author;}

}

Page 43: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 43/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 43

3.4.3 Quan hệ many-to-one(tt)

public class Query {public static void save(Author author) {

Session session = HibernateUtil.getSession();Transaction transaction = session.beginTransaction();session.save(author);transaction.commit();session.close();

}public static void save(Book book) {

Session session = HibernateUtil.getSession();Transaction transaction = session.beginTransaction();session.save(book);transaction.commit();session.close();

}}

Page 44: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 44/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 44

3.4.3 Quan hệ many-to-one(tt)

public class Test {public static void main(String[] args) {

Author au1 = new Author("TS.Pham Van Tinh");Author au2 = new Author("ThS.Le Phi Hung");Book b1 = new Book("Lap trinh mang 1", au1);Book b2 = new Book("Thiet ke huong doi tuong", au2);Book b3 = new Book("Quan tri mang", au1);Book b4 = new Book("Lap trinh B", au2);Query.save(b1);Query.save(b2);Query.save(b3);Query.save(b4);

}}

Page 45: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 45/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 45

3.4.3 Quan hệ many-to-one(tt)Cấu trúc table:

Table author

Table book

Page 46: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 46/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 46

3.4.4 Quan hệ many-to-manyThể hiện mối quan hệ giữa hai đối tượng, đối tượng thứ nhất

tham chiếu đến nhiều đối tượng thứ hai và ngược laị.Tư khóa trong HA: @ManyToManyTrong đối tượng thứ nhất sẽ chứa nhiều đối tượng thứ hai và

được khai báo @ManyToMany.

Ví dụ: Một môn học thì có nhiều sinh viên học môn học đó và một sinh viên thì có thể học nhiều môn học.

Coursename : String

Studentname : String

0..*0..* 0..*0..*

Page 47: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 47/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 47

3.4.4 Quan hệ many-to-many(tt)@Entitypublic class Course {

@Idprivate String name;@ManyToManyprivate List<Student> list = new ArrayList<Student>();public Course() {}public Course(String name) {

this.name = name;}public String getName() {

return name;}public void setName(String name) {

this.name = name;}public List<Student> getList() {

return list;}public void setList(List<Student> list) {

this.list = list;}public void addStudent(Student student) {

this.list.add(student);}

}

Page 48: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 48/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 48

3.4.4 Quan hệ many-to-many(tt)

@Entitypublic class Student {

@Idprivate String name;public Student() {}public Student(String name) {

this.name = name;}public String getName() {

return name;}public void setName(String name) {

this.name = name;}@Overridepublic String toString() {

return this.name;}

}

Page 49: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 49/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 49

3.4.4 Quan hệ many-to-many(tt)

public class Query {public static void save(Object object) {

Session session = HibernateUtil.oppenSession();Transaction transaction = session.beginTransaction();session.save(object);transaction.commit();session.close();

}}

Page 50: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 50/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 50

3.4.4 Quan hệ many-to-many(tt)

public class Test {public static void main(String[] args) {

Session session = HibernateUtil.oppenSession();session.beginTransaction().begin();Student trung = new Student("Trung");Student tung = new Student("Tung");Course ltm1 = new Course("Lap trinh mang 1");Course tkhdt = new Course("Thiet ke huong doi tuong");ltm1.addStudent(trung);ltm1.addStudent(tung);tkhdt.addStudent(trung);tkhdt.addStudent(tung);Query.save(trung);Query.save(tung);Query.save(ltm1);Query.save(tkhdt);session.getTransaction().commit();

}}

Page 51: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 51/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 51

3.4.4 Quan hệ many-to-many(tt) Cấu trúc table:

Table Course_Student

Table StudentTable Course

Page 52: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 52/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 52

3.5 Kế thừaHibernate có 3 cách mapping là:o Map tất cả dữ liệu xuống duy nhất một table.o Map riêng lớp cha và các lớp con, khi đó trong table của lớp con

sẽ chứa khóa của lớp cha.o Không map dữ liệu trong lớp cha mà đưa thẳng dữ liệu trong lớp

cha về các lớp con. Khi đó có bao nhiêu lớp con sẽ có bấy nhiêu table.

Lớp cha phải được khai báo @InheritancePhải được khai báo cách map:

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)@Inheritance(strategy = InheritanceType.JOINED)@Inheritance(strategy =

InheritanceType.TABLE_PER_CLASS)

Page 53: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 53/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 53

Ví dụ:

Personid : longname : String

Studentlop : Stringkhoa : String

Teachertruong : Stringmon : String

Page 54: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 54/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 54

Class PerSon – lớp cha – ta khai báo Inheritance và cách map@Entity@Inheritance(strategy = InheritanceType.SINGLE_TABLE)// @Inheritance(strategy = InheritanceType.JOINED)// @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)public abstract class Person {

@Id@GeneratedValueprivate long id;private String name;public String getName() {

return name;}public void setName(String name) {

this.name = name;}public long getId() {

return id;}public void setId(long id) {

this.id = id;}

}

Page 55: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 55/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 55

Class Teacher – lớp con

@Entitypublic class Teacher extends Person {

private String truong;private String mon;public String getTruong() {

return truong;}public void setTruong(String truong) {

this.truong = truong;}public String getMon() {

return mon;}public void setMon(String mon) {

this.mon = mon;}

}

Page 56: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 56/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 56

Class Student – lớp con

@Entitypublic class Student extends Person {

private String lop;private String khoa;public String getLop() {

return lop;}public void setLop(String lop) {

this.lop = lop;}public String getKhoa() {

return khoa;}public void setKhoa(String khoa) {

this.khoa = khoa;}

}

Page 57: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 57/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 57

Test

public class Query {public static void save(Person person) {

Session session = HibernateUtil.oppenSession();session.beginTransaction().begin();session.save(person);session.getTransaction().commit();

}public static void main(String[] args) {

Student student = new Student();student.setKhoa("CNTT");student.setLop("06");student.setName("abc");save(student);Teacher teacher = new Teacher();teacher.setMon("CNPM");teacher.setName("abc");teacher.setTruong("NLU");save(teacher);

}}

Page 58: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 58/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 58

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

Page 59: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 59/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 59

@Inheritance(strategy = InheritanceType.JOINED)

Table Person

Table Student Table Teacher

Page 60: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 60/24

3. Hibernate Annotation (HA)3. Hibernate Annotation (HA)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 60

Table Student

Table Teacher

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

Page 61: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 61/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 61

HQL là ngôn ngữ dùng để truy vấn trên Hibernate. HQL có thể thao tác giống như sử dụng bằng SQL.

Thông qua HQL ta có thể có một số thao tác như: update, delete, select…

HQL cho phép tạo câu truy vấn có tham số, để thực thi ta có thể dùng các setX(obj: Object, obj: Object) tương ứng. (setString(agr0:String,agr1:String))

Page 62: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 62/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 62

4.1 Giới thiệu HQL

HQL là ngôn ngữ dùng để truy vấn trên Hibernate. HQL có thể thao tác giống như sử dụng bằng SQL.

Thông qua HQL ta có thể có một số thao tác như: update, delete, select…

HQL cho phép tạo câu truy vấn có tham số, để thực thi ta có thể dùng các setX(obj: Object, obj: Object) tương ứng. (setString(agr0:String,agr1:String))

Page 63: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 63/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 63

4.2 Cách tạo HQL:

Session session=HibernateUltil.getSession();Query query=session.create(String query);

4.3 Câu HQL đơn giảnQuery query = session.createQuery("from User") ;Lấy tất cả dữ liệu là đối tượng User;from User (HQL) Select * from User; (SQL)

Page 64: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 64/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 64

4.4 Câu HQL đặt biến, có điều kiệnCâu lệnh select có điều kiệnQuery query = session.createQuery("from User u where u.name

= :name");query.setString("name", "THUAN");u là biến được đặt và thay thế đối tương User trong cả câu lệnh.

Name là biến đại diện giúp ta có thể sử dụng câu HQL nhiều lần, tùy theo thuộc tính của name mà ta sẽ setString, setDouble, set …. from User u where u.name = :name; Select * from User where User.name:=?;

Câu lệnh update có điều kiện Query query=session.createQuery(“update from Student s set

s.name= :name where id= :id”);query.setString(“name”,”Le Nhat Tung”);query.setString(“id”,”07130142”);query.executeUpdate();

Chú ý rằng User không phải là tên của bảng trong cơ sở dữ liệu. “User”, “Student” là tên của đối tượng tương ứng với bảng đó. Và tên của những đối tượng này có phân biệt chữ hoa và chữ thường.

Page 65: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 65/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 65

Ví dụ: Áp dụng các câu HQL cho Cat- Câu lệnh insert có hai cách:Dùng phương thức persist hay phương thức save

Session session = HibernateUtil.getSession();

Transaction tr = session.beginTransaction();

Cat cat1 = new Cat("Mimi");

Cat cat2 = new Cat("Tom");

session.save(cat1);

session.persist(cat2);

tr.commit();

session.close();

Page 66: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 66/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 66

- Câu lệnh update:

Session session = HibernateUtil.getSession();

Transaction tr = session.beginTransaction();

Query query=session.createQuery("update from Cat c set c.name=:name where c.id=:id");

query.setString("name", "meo Mimi");

query.setInteger("id", 1);

tr.commit();

session.close();

Page 67: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 67/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 67

- Câu lệnh delete:

Session session = HibernateUtil.getSession();

Transaction tr = session.beginTransaction();

Query query=session.createQuery("delete from Cat c where c.id=:id");

query.setInteger("id", 2);

tr.commit();

session.close();

Page 68: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 68/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 68

- Câu lệnh select không có điều kiện:

Session session = HibernateUtil.getSession();

Transaction tr = session.beginTransaction();

Query query = session.createQuery("from Cat c");

List list = query.list();

for (Object obj : list) {

System.out.println(obj);

}

tr.commit();

session.close();

Page 69: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 69/24

4. HQL (Hibernate Query 4. HQL (Hibernate Query Language)Language)

Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 69

- Câu lệnh select có điều kiện:

Session session = HibernateUtil.getSession();

Transaction tr = session.beginTransaction();

Query query = session.createQuery("from Cat c where c.id=:id");

query.setInteger("id", 1);

List list = query.list();

for (Object obj : list) {

System.out.println(obj);

}

tr.commit();

session.close();

Page 70: Hibernate Tung Trung DH07DT

Khoa CNTT – ĐH Nông Lâm TP. HCM 01/2007 70/24Khoa CNTT – ĐH Nông Lâm TP.HCM 10/2009 70

Thank YouEmail: [email protected] [email protected]