Bài giảng Phát triển Web với Java EE - Bài 8: Hibernate Query Language

JDBC - SQL

JDBC sử dụng các câu lệnh SQL để thực hiện

truy van dữ liệu để truy vãn dữ liệu và các

thao tác cập nhật như thêm, xóa, sửa trên

bảng dữ liệu.

Để thao tác tốt các câu lệnh SQL cần quan tâm

đến các bảng, các dòng, các cột và mối quan

hệ giữa các bảng và đặc biệt là hệ quản trị

cơ sở dữ liệu đang làm việc.

Kết quả trả về của câu lệnh truy vấn là danh

sách các dòng dữ liệu.Hibernate - HQL

Hibernate cung cấp các API cho phép thực hiện

tác thao tác cập nhật như thêm, xóa, sửa.

Hibernate cung cấp ngôn ngữ truy vấn rất

mạnh được gọi là Hibernate Query Language (HQL).

HQL độc lập hệ quản trị cơ sở dữ liệu và

được Hibernate thông dịch sang SQL tương ứng

trong quá trình thực thi.

HQL là ngôn ngữ truy vấn theo hướng đối

tượng. Kết quả truy vấn là đối tượng

Hibernate sử dụng các lớp đối tượng và các

thuộc tính thay cho các bảng và các cột.

pdf 31 trang kimcuc 11550
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phát triển Web với Java EE - Bài 8: Hibernate Query Language", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Phát triển Web với Java EE - Bài 8: Hibernate Query Language

Bài giảng Phát triển Web với Java EE - Bài 8: Hibernate Query Language
Bài 8: Hibernate Query Language 
Nôi dung bài học 
Hibernate Query Language (HQL) 
HQL - from HQL - select 
HQL - aggregate function 
HQL - where 
HQL - Expression 
HQL - order by 
HQL - group by & having 
HQL - sub query 
JDBC - SQL 
■ JDBC sử dụng các câu lệnh SQL để thực hiện 
truy van dữ liệu để truy vãn dữ liệu và các 
thao tác cập nhật như thêm, xóa, sửa trên 
bảng dữ liệu. 
■ Để thao tác tốt các câu lệnh SQL cần quan tâm 
đến các bảng, các dòng, các cột và mối quan 
hệ giữa các bảng và đặc biệt là hệ quản trị 
cơ sở dữ liệu đang làm việc. 
■ Kết quả trả về của câu lệnh truy vấn là danh 
sách các dòng dữ liệu. 
Hibernate - HQL 
■Hibernate cung cấp các API cho phép thực hiện 
tác thao tác cập nhật như thêm, xóa, sửa. 
■ Hibernate cung cấp ngôn ngữ truy vấn rất 
mạnh được gọi là Hibernate Query Language (HQL). 
■ HQL độc lập hệ quản trị cơ sở dữ liệu và 
được Hibernate thông dịch sang SQL tương ứng 
trong quá trình thực thi. 
■ HQL là ngôn ngữ truy vấn theo hướng đối 
tượng. Kết quả truy vấn là đối tượng 
■ Hibernate sử dụng các lớp đối tượng và các 
thuộc tính thay cho các bảng và các cột. 
■ HQL không phân biệt thường hoa ngoại trừ 
- Tên các lớp đối tượng 
- Các thuộc tính trong lớp đối tượng 
■ Ví dụ 2 câu truy vấn giống nhau 
- Select s from Sach s SELECT s FROM Sach s 
- Select s From Sach s SELECT s FROM Sach s 
■ Ví dụ 2 câu truy vấn khác nhau 
- select s from sach s SELECT s FROM Sach s 
- Select s From SACH s SELECT s FROM Sach s 
HQL - Phân biệt hoa thường 
HQL - Mệnh đề from 
■ Lấy tất cả cá đối tượng danh mục 
-from DanhMuc 
-select dm from DanhMuc dm 
-select dm from DanhMuc as dm 
■ Lấy tất cả đối tượng sách 
-from Sach 
-select s from Sach s 
-select s from Sach as s 
HQL - Mệnh đề from - lấy tất cả đối tượng 
1 
2 
3 
String hql = "from Sach"; 
Query query = session.createQuery(hql); 
List ds=query.list(); 
HQL - Mệnh đề from - phân trang 
1 String hql = "from Sach"; 
2 Query query = session.createQuery(hql); 
3 query.setFirstResult(3); 
4 query.setMaxResults(5); 
5 List ds=query.list(); 
- Lấy từ vị trí thứ n (tính từ 
0) setFirstResult (int n) 
- lấy tối đa m đối tượng 
setMaxResults (int m) 
- Tương tự trong 
MYSQL LIMIT N, M 
HQL - join 
■ cross join 
■ inner join hoặc join 
■ left join hoặc left outer join 
■ right join hoặc right outer join 
■ left join fetch hoặc left outer join fetch 
■ right join fetch hoặc right outer join 
fetch 
HQL - cross join 
■ Thực hiện tích cartesian (còn gọi là cross join) 
—from Sach, DanhMuc 
—from Sach s, DanhMuc dm 
—select s,dm from Sach s, DanhMuc dm 
■ Kết quả trả về là một ArrayList 
■ Số lượng phần tử = số lượng danh mục * 
số lượng sách 
1 String hql = "from Sach s, DanhMuc dm"; 
2 Query query = session.createQuery(hql); 
3 ArrayList ds = query.list(); 
4 for(int i=0; i<ds.size(); i++){ 
5 Object[] objs=ds.get(i); 
6 Sach s=(Sach)objs[0]; 
7 DanhMuc dm=(DanhMuc)objs[1]; 
8 } 
HQL - cross join 
■ Số lượng danh mục: 4 
■ Số lượng sách: 10 (đều thuộc danh mục) 
■ inner join 
—from DanhMuc dm inner join dm.sachs 
 ■ Kết quả — Số lượng: 10 
HQL - inner join 
HQL - left join 
Số lượng danh mục: 4 (2 danh mục không có sách) 
Số lượng sách: 10 (đều thuộc danh mục) 
Left join 
—from DanhMuc dm 
left join dm.sachs 
■ Kết quả 
— Số lượng: 12 
—2 danh mục không có sách nào thuộc về 
HQL - right join 
■ Số lượng danh mục: 4 
■ Số lượng sách: 10 (đều thuộc danh 
mục) 
■ Right join 
—from DanhMuc dm 
right join dm.sachs 
■ Kết quả 
— Số lượng: 10 
■ Số lượng danh mục: 4 (có 
■ Số lượng sách: 10 (đều thuộc danh 
mục) 
■ Left join fetch 
from Sach s left 
s.danhMuc 
■ Kết quả — Số 
lượng: 10 
join fetch 
HQL - left join fetch 
■ Số lượng danh mục: 4 (có 
■ Số' lượng sách: 10 
(đều 
■ right join fetch 
from Sach s right 
s.danhMuc 
■ Kết quả 
— Số lượng: 10 
thuộc danh mục) 
• • / 
join fetch 
HQL - right join fetch 
HQL - select 
1 
2 
3 
String hql = "select s.danhMuc from Sach s"; 
Query query = session.createQuery(hql); 
List ds=query.list(); 
HQL - select 
1 
2 
3 
String hql = "select s.danhMuc.tenDanhMuc from Sach s"; 
Query query = session.createQuery(hql); 
List ds=query.list(); 
HQL- select 
1 String h ="select s.maSach, s.tenSach, s.danhMuc from Sach s"; 
2 Query query = session.createQuery(h); 
3 List ds=query.list(); 
4 for(int i=0; i<ds.size(); i++){ 
5 Object[] objs=ds.get(i); 
6 String maSach=(String)objs[0]; 
7 String tenSach=(String)objs[1]; 
8 DanhMuc dm=(DanhMuc)objs[2]; 
9 } 
HQL - select 
1 
2 
3 
4 
String hql ="select distinct s.danhMuc.tenDanhMuc from 
Sach s"; 
Query query = session.createQuery(hql); 
List ds=query.list(); 
HQL - select 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
package pojo; 
public class MyClass { 
private String maSach; private String 
tenSach; private DanhMuc danhMuc; 
public MyClass() { 
} 
public MyClass(String maSach, String tenSach, 
DanhMuc danhMuc) { 
this.maSach = maSach; 
this.tenSach = 
tenSach; this.danhMuc 
= danhMuc; 
} 
//Getters & Setters 
} 
HQL - select 
HQL - Aggregate functions 
avg 
min 
max 
count 
sum 
HQL - Aggregate functions 
HQL - where 
HQL - Expression 
■ + - * / 
■ =, >=, , !=, like 
■ and, or, not 
■ ( ) 
■ in, not in, between, is null, is not null, is 
empty, is not empty, member of, not member of 
■ case ... when ... then ... else ... end 
HQL - Expression 
■ concat(,) 
■ current_date(), current_time(), 
current_timestamp() 
■ second(...), minute(...), hour(...), 
day(...), month(...), year(...) 
■ substring(), trim(), lower(), 
upper(), length(), locate(), abs(), 
sqrt(), bit_length(), mod() 
■ coalesce() , nullif() 
■ str(), ... 
HQL - order by 
1 
2 
3 
4 
5 
6 
7 
8 
9 
String tenSach=M3ava"; 
String hql = ” from Sach s”; 
hql=hql +” where s.tenSach like :tenSach”; 
hql=hql +” order by s.tenSach desc”; 
Query query = session.createQuery(hql); 
query.setString(MtenSachM, ,,%"+tenSach+M%M); 
ArrayList ds = query.list(); 
HQL - group by & having 
1 
2 
3 
4 
5 
6 
7 
String hql = 
hql = hql + 
hql = hql + 
hql = hql + 
select s.danhMuc, sum(s.soLuong)"; 
from Sach s”; group by s.danhMuc”; 
having sum(s.soLuong)>100”; 
Query query = session.createQuery(hql); 
ArrayList ds = query.list(); 
HQL - subquery 
XIN CẢM ƠN! 

File đính kèm:

  • pdfbai_giang_phat_trien_web_voi_java_ee_bai_8_hibernate_query_l.pdf