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.
1 2 3 | String hql = "FROM nhanvien"; Query query = session.createQuery(hql); List results = query.list(); |
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.
1 2 3 | String hql = "FROM nhanvien AS nv"; Query query = session.createQuery(hql); List results = query.list(); |
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:
1 2 3 | String hql = "FROM nhanvien nv"; Query query = session.createQuery(hql); List results = query.list(); |
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.
1 2 3 | String hql = "SELECT nv.tenNhanVien FROM nhanvien nv"; Query query = session.createQuery(hql); List results = query.list(); |
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.
1 2 3 | String hql = "FROM nhanvien nv WHERE nv.idNhanVien = 5"; Query query = session.createQuery(hql); List results = query.list(); |
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.
1 2 3 | String hql = "from sinhvien order by idSinhVien DESC"; Query query = session.createQuery(hql); List results = query.list(); |
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 :
1 2 3 | String hql = "from sinhvien order by idSinhVien DESC, tenSinhVien DESC"; Query query = session.createQuery(hql); List results = query.list(); |
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.
1 2 3 | String hql = "from sinhvien group by tenSinhVien"; Query query = session.createQuery(hql); List results = query.list(); |
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ố:
1 2 3 4 | String hql = "FROM sinhvien sv WHERE sv.idSinhVien = :idSinhVien"; Query query = session.createQuery(hql); query.setParameter("idSinhVien",5); List results = query.list(); |
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.
1 2 3 4 5 6 | String hql = "UPDATE sinhvien set tenSinhVien = :tenSinhVien " + "WHERE idSinhVien = :idSinhVien"; Query query = session.createQuery(hql); query.setParameter("tênSinhVien", "Nguyễn Văn B"); query.setParameter("idSinhVien", 10); int result = query.executeUpdate(); |
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.
1 2 3 4 5 | String hql = "DELETE FROM sinhvien " + "WHERE idSinhVien = :idSinhVien"; Query query = session.createQuery(hql); query.setParameter("idSinhVien", 5); int result = query.executeUpdate(); |
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.
1 2 3 4 | String hql = "INSERT INTO sinhvien(idSinhVien,tenSinhVien)" + "SELECT idSinhVien,tenSinhVien FROM old_sinhvien"; Query query = session.createQuery(hql); int result = query.executeUpdate(); |
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:
STT | Tên hàm | Mô tả |
---|---|---|
1 | avg(property name) | Giá trị trung bình của property name |
2 | count(property name or *) | Số lần thuộc tính property name xuất hiện trong danh sách kết quả |
3 | max(property name) | Giá trị lớn nhất của property name |
4 | min(property name) | Giá trị nhỏ nhất của property name |
5 | sum(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ả.
1 2 3 | String hql = "SELECT count(distinct sv.tenSinhVien) FROM sinhvien sv"; Query query = session.createQuery(hql); List results = query.list(); |
13.Query in Hibernate – Pagination using Query
Sau đây là hai phương thức phân trang sử dụng query.
STT | Phương thức & mô tả |
---|---|
1 | Query 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. |
2 | Query 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.
1 2 3 4 5 | String hql = "FROM sinhvien"; Query query = session.createQuery(hql); query.setFirstResult(1); query.setMaxResults(10); List results = query.list(); |
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:
1 | session.createSQLQuery(sql); |
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)
long
- Edit
k quay video ha admin
Admin_NCM
- Edit
Có nha bạn mình chưa quay xong.
JD
- Edit
Cảm ơn bạn nhiều nha 🙂