[Hibernate] Bài 7: Query Trong Hibernate (Hibernate Query Language – HQL)

Query trong Hibernate (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 bảng và cột thì HQL làm việc với các đối tượng persistent và thuộc tính của chúng.

Bạn có thể sử dụng câu lệnh SQL trực tiếp với Hibernate bởi truy vấn HQL được Hibernate dịch sang các truy vấn SQL thông thường. Nhưng bạn nên sử dụng HQL bất cứ khi nào có thể để tránh khỏi các thay đổi phức tạp của CSDL và tận dụng được ưu điểm SQL của Hibernate.

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

1.Query in Hibernate – FROM Clause

Sử dụng FROM nếu bạn muốn lấy toàn bộ các đối tượng trong bảng. Ví dụ sau đây câu query trong Hibernate lấy toàn bộ nhân viên trong bảng nhân viên.

2.Query in Hibernate – AS Clause

Được sử dụng để gán bí danh cho lớp đặc biệt là trong các câu truy vấn dài, sau đây là ví dụ gán bí danh.

Các từ khóa AS là tùy chọn và bạn cũng có thể chỉ định bí danh trực tiếp cho tên bảng, như sau:

3.Query in Hibernate – SELECT Clause

Từ khóa SELECT kiểm soát được kết quả trả về từ câu truy vấn, ví dụ bạn muốn lấy danh sách tên nhân viên trong bảng nhân viên.

4.Query in Hibernate – WHERE Clause

Từ khóa WHERE là điều kiện trong câu truy vấn, dựa vào điều kiện mà trả về kết quả cho câu truy vấn. Ví dụ sau đây tìm nhân viên có idNhanVien=5 trong bảng nhân viên.

5.Query in Hibernate – ORDER BY Clause

Từ khóa ORDER BY được sử dụng để sắp xếp kết quả của truy vấn HQL, có thể sắp xếp kết quả theo chiều tăng dần (ASC) hoặc giảm dần (DESC). Ví dụ sau đây sắp xếp theo thứ tự giảm dần idSinhVien.

Nếu muốn sắp sếp theo nhiều hơn một thuộc tính thì có thể làm như sau :

Nếu bạn muốn sắp sếp theo thứ tự tăng dần bạn chỉ cần thay đổi DESC thành ASC.

6.Query in Hibernate – GROUP BY Clause

Từ khóa GROUP BY được sử dụng để nhóm các các kết quả truy vấn HQL theo các thuộc tính. Ví dụ sau đây nhóm những Sinh Viên có cùng tên.

7.Query in Hibernate – Using Named Paramters

Hibernate hỗ trợ tên tham số trong truy vấn HQL của nó. Điều này làm cho văn bản truy vấn HQL dễ dàng chấp nhận đầu vào từ người sử dụng và bạn không cần phải bảo vệ chống lại các cuộc tấn công SQL injection. Sau đây là cú pháp đơn giản của việc sử dụng tên tham số:

8.Query in Hibernate – UPDATE Clause

Từ khóa UPDATE được sử dụng để cập nhật một hoặc nhiều thuộc tính của một hoặc nhiều đối tượng. Sau đây là ví dụ cập nhật tên sinh viên dựa vào id sinh viên.

9.Query in Hibernate – DELETE Clause

Từ khóa DELETE được sử dụng để xóa một hoặc nhiều đối tượng. Ví dụ sau đây xóa sinh viên có idSinhVien =5.

10.Query in Hibernate – INSERT Clause

Từ khóa INSERT INTO để thêm một đối tượng từ một đối tượng khác.

11.Query in Hibernate – Aggregate Methods

HQL hỗ trợ một loạt các phương pháp tổng hợp, tương tự như SQL. Cơ chế làm việc trong HQL như trong SQL và sau đây là danh sách các chức năng có sẵn:

STTTên hàmMô tả
1avg(property name)Giá trị trung bình của property name
2count(property name or *)Số lần thuộc tính property name xuất hiện trong danh sách kết quả
3max(property name)Giá trị lớn nhất của property name
4min(property name)Giá trị nhỏ nhất của property name
5sum(property name)Tổng hợp giá trị property name

12.Query in Hibernate – DISTINCT

Từ khóa distinct chỉ hiển thị giá trị duy nhất trong danh sách dòng kết quả.

13.Query in Hibernate – Pagination using Query

Sau đây là hai phương thức phân trang sử dụng query.

STTPhương thức & mô tả
1Query setFirstResult(int startPosition) Phương thức này truyền vào một số nguyên là vị trí dòng đầu tiên trong danh sách kết quả, bắt đầu từ 0.
2Query setMaxResults(int maxResult) Phương thức này cố định số lượng lớn nhất trả về.

Ví dụ mô tả chi tiết hai phương thức phân trang.

Kết quả trả về của câu  truy vấn là danh sách có 10 sinh viên.

Query trong Hibernate bạn có thể sử dụng câu truy vấn HQL hoặc SQL đều được, trong bài này mình lấy ví dụ về HQL trong Hibernate. Nếu bạn nào sử dụng câu truy vấn SQL thì chỉ cần thay đổi:

Tham khảo: http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm

Với mỗi từ khóa Query trong Hibernate mình sẽ quay video và cho ví dụ cụ thể các bạn nhớ đón xem video của mình nhé.

(Tác giả: Công Minh)

3 thoughts on “[Hibernate] Bài 7: Query Trong Hibernate (Hibernate Query Language – HQL)

Bình luận

Loading...