Truy vấn HQL

Một phần của tài liệu xây dựng phần mềm quản lý nhà hàng với bộ công cụ jsf, primefaces và hibernate (Trang 42 - 46)

Hibernate Query Language (HQL) là một ngôn ngữ truy vấn hướng đối tượng, tương tự như SQL, nhưng thay vì hoạt động trên các bảng và các cột, HQL làm việc với các các đối tượng persistent và thuộc tính của chúng. Truy vấn HQL được chuyển đổi bởi Hibernate vào các truy vấn SQL thông thường sau đó lại thực hiện trên cơ sở dữ liệu.

Mặc dù bạn có thể sử dụng câu lệnh SQL trực tiếp với Hibernate bằng cách sử dụng SQL Native nhưng tốt nhất nên sử dụng HQL để tránh việc làm cho cơ sở dữ liệu thêm phức tạp, và để tận dụng lợi thế của các chiến lược tạo bộ nhớ đệm của Hibernate.

Các từ khóa như SELECT, FROM và WHERE,… không phân biệt hoa thường nhưng các thuộc tính như bảng và cột tên là phân biệt hoa thường trong HQL.

2.3.7.1 Mệnh đề FROM

Các truy vấn Hibernate đơn giản nhất: from eg.Cat

Trả về tất cả các trường của lớp eg.Cat. Bạn thường không cần phải đặt điều kiện tên lớp. Ví dụ như:

41 from Cat

Truy vấn có thể đặt lại tên cho lớp Cat và bạn có thể sử dụng tên này cho truy vấn from Cat as cat

2.3.7.2 Associations and Joins

Bạn cũng có thể gán bí danh cho các đối tượng có liên quan hoặc các yếu tố của tập các giá trị sử dụng joins với nhau. Ví dụ như:

from Cat as cat

inner join cat.mate as mate left outer join cat.kittens as kitten

from Cat as cat left join cat.mate.kittens as kittens from Formula form full join form.parameter param

Các loại hỗ trợ tham gia được vay mượn từ ANSI SQL: inner join

left outer join right outer join

full join (not usually useful)

2.3.7.3 Hình thức của cú pháp Joins

HQL hỗ trợ hai hình thức liên kết gia nhập: tuyệt đối và rõ ràng.

Các truy vấn được hiển thị trong phần trước sử dụng tất cả các hình thức rõ ràng, các từ khóa được sử dụng một cách rõ ràng trong mệnh đề From. Đây là hình thức khuyến khích.

Các hình thức tuyệt đối không sử dụng các từ khóa Join. Thay vào đó, các Associations được sử dụng dấu chấm-ký hiệu. Join tuyệt đối có thể xuất hiện ở bất kỳ câu truy vấn HQL. Kết quả join tuyệt đối trong inner joins trong kết quả các lệnh SQL. from Cat as cat where cat.mate.name like '%s%'

2.3.7.4 Mệnh đề Select

Mệnh đề Select giúp chọn bảng hoặc thuộc tính tiêu biểu để trả về kết quả truy vấn select mate

from Cat as cat

42

Truy vấn có thể trở nhiều đối tượng và / hoặc thuộc tính như một mảng kiểu Object []: select mother, offspr, mate.name

from DomesticCat as mother inner join mother.mate as mate left outer join mother.kittens as offspr

2.3.7.5 Các hàm tổng hợp

Truy vấn HQL có thể trả lại kết quả của các chức năng tổng hợp về thuộc tính: select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)

from Cat cat

Các chức năng tổng hợp được hỗ trợ là: avg(...), sum(...), min(...), max(...) count(*)

count(...), count(distinct ...), count(all...)

Các distinct cũng có thể được sử dụng và có ngữ nghĩa tương tự như trong SQL. select distinct cat.name from Cat cat

select count(distinct cat.name), count(cat) from Cat cat

2.3.7.6 Mệnh đề Where

Mệnh đề Where cho phép bạn lọc danh sách các trường hợp trả lại. from Cat as cat where cat.name='Fritz'

from bank.Account account

where account.owner.id.country = 'AU'

and account.owner.id.medicareNumber = 123456

2.3.7.7 Các biểu thức

Thuật ngữ dùng trong mệnh đề bao gồm: Toán tử toán học: +, -, *, /

Toán tử so sánh nhị phân: =,> =, <=, <>, =, như Logic: and, or, not.

Dấu ngoặc đơn () chỉ ra rằng nhóm in, not in, between, is null, is not null, is empty, is not empty, member of and not member of

43

"Simple" case, case ... when ... then ... else ... end, and "searched" case, case when ... then ... else ... end

string concatenation ...||... or concat(...,...)

current_date(), current_time(), and current_timestamp()

second(...), minute(...), hour(...), day(...), month(...), and year(...)

Bất kỳ chức năng hoặc hệ thống theo quy định của EJB QL-3.0: substring(), trim(), lower(), upper(), length(), locate(), abs(), sqrt(), bit_length(), mod()

coalesce() and nullif()

str () để chuyển đổi các giá trị số hoặc thời gian để có thể đọc được một chuỗi

cast(... as ...), nơi mà các đối số thứ hai là tên của một loại Hibernate, và trích xuất (... từ ...) nếu ANSI cast () và extract() được hỗ trợ bởi các cơ sở dữ liệu cơ bản

from DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' ) select mother from Cat as mother, Cat as kit

where kit in elements(foo.kittens)

2.3.7.8 Mệnh đề Order by

Danh sách trả về từ truy vấn có thể được sắp xếp theo bất kỳ thuộc tính của một lớp hoặc các thành phần. Bạn có thể đặt các kết quả của bất kỳ thuộc tính của một lớp hoặc tăng dần (ASC) hoặc giảm dần (DESC). Sau đây là cú pháp đơn giản của việc sử dụng mệnh đề ORDER BY:

from DomesticCat cat

order by cat.name asc, cat.weight desc, cat.birthdate

2.3.7.9 Mệnh đề Group by

Mệnh đề này cho phép Hibernate lấy thông tin từ các cơ sở dữ liệu và nhóm nó dựa trên một giá trị của một thuộc tính và, thông thường, sử dụng kết quả bao gồm tổng giá trị. Sau đây là cú pháp đơn giản của việc sử dụng mệnh đề GROUP BY:

select cat.color, sum(cat.weight), count(cat) from Cat cat

group by cat.color

44

Một phần của tài liệu xây dựng phần mềm quản lý nhà hàng với bộ công cụ jsf, primefaces và hibernate (Trang 42 - 46)

Tải bản đầy đủ (PDF)

(85 trang)