Làm việc với các trang: GIỚI HẠN và OFFSET

Thông thường, dữ liệu từ cơ sở dữ liệu được truy xuất trong các “trang”. Bởi vì đó là cách thuận tiện để làm việc với các danh sách lớn. Trước tiên, chúng tôi truy vấn các hàng từ 1 đến 20, sau đó từ 21 đến 40, v.v.

Đây là một tình huống phổ biến mà SQL có các toán tử đặc biệt cho LIMIT và OFFSET này.

Tương tự của các toán tử này cũng có mặt trong Hibernate. Chỉ họ ngay lập tức quyết định thực hiện chúng dưới dạng các phương pháp riêng biệt:

  • setFirstResult() tương tự như OFFSET .
  • setMaxResults() tương tự như LIMIT .

Viết truy vấn sử dụng các phương pháp này là rất dễ dàng. Hãy viết một truy vấn trong đó chúng tôi yêu cầu trả về 20 nhiệm vụ bắt đầu từ 41. Nó sẽ trông như thế này:

Query<EmployeeTask> query = session.createQuery( “from EmployeeTask, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();

Sắp xếp kết quả

Chúng tôi đã tìm ra cách lấy một phần chuỗi kết quả của truy vấn. Vấn đề cấp bách tiếp theo là phân loại.

Sắp xếp trong Hibernate được viết trực tiếp trong truy vấn HQL và thường được mong đợi:

from Employee order by joinDate

Nếu bạn muốn thay đổi thứ tự sắp xếp, thì bạn cần sử dụng các từ quen thuộc: asc và desc. Ví dụ:

from Employee order by joinDate desc

Giống như trong SQL, bạn có thể sắp xếp theo nhiều trường:

from Employee order by joinDate desc, name asc

Ngoài ra, trường sắp xếp có thể được truyền dưới dạng tham số:

String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);

List<EmployeeTask> resultLIst = query.list();

Hàm trong HQL

Giống như trong SQL trong HQL, bạn có thể sử dụng nhiều chức năng khác nhau.

Dưới đây là danh sách các chức năng tổng hợp mà HQL hỗ trợ:

Chức năng tổng hợp Sự miêu tả
đếm() Trả về số hàng
Tổng() Tính tổng các giá trị
phút() Trả về giá trị nhỏ nhất
tối đa() Trả về giá trị lớn nhất
trung bình() Trả về giá trị trung bình

Như bạn hy vọng đã nhớ, các hàm tổng hợp là những hàm có thể được sử dụng kết hợp với nhóm theo. Nhóm theo hoạt động giống hệt như trong SQL, vì vậy chúng tôi sẽ không lặp lại chính mình.

Và, tất nhiên, các chức năng thông thường . Với các chức năng thông thường, mọi thứ đơn giản hơn nhiều - chúng được thực hiện bởi máy chủ SQL, Hibernate chỉ cần tạo chính xác một truy vấn bằng cách sử dụng chúng.

Do đó, Hibernate hỗ trợ tất cả các tính năng mà SQL Server hỗ trợ. Và loại máy chủ SQL được đặt theo tham số sqlDialect khi bạn định cấu hình SessionFactory của mình.

Hãy tìm số lượng nhiệm vụ được giao cho người dùng:

String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();