hibernate tung trung dh07dt
TRANSCRIPT
GVHD: TS.Phạm Văn TínhSVTH: Lê Nhật Tùng Đoàn Bảo Trung
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
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
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
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
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
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
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.
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.
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
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
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…
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.
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.
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.
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
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
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.
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.
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
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
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
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.
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
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.
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
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
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.……..
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
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
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();}
}
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();
}
}
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.
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..*
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;}
}
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;}
}
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();
}}
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);
}}
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
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
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;}
}
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;}
}
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();
}}
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);
}}
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
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..*
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);}
}
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;}
}
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();
}}
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();
}}
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
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)
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
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;}
}
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;}
}
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;}
}
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);
}}
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)
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
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)
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))
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))
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)
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.
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();
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();
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();
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();
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();
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]