Hibernate HQL ②
分頁查詢:
- setFirstResult(int firstResult):設定從哪一個對象開始檢索,參數 firstResult 表示這個對象在查詢結果中的索引位置,索引位置的起始值為零。默認情況下,Query 從查詢結果中的第一個對象開始檢索
- setMaxResult(int maxResults):設定一次最多檢索出的對象的數目。在默認情況下,Query 和 Criteria 接口檢索出查詢結果中所有的對象
public void testPageQuery(){ String hql = "FROM Employee"; Query query = session.createQuery(hql); int pageNo = 3; int pageSize = 5; List<Employee> employees = query.setMaxResults(pageSize) .setFirstResult((pageNo - 1) * pageSize) .list(); for(Employee employee : employees){ System.out.println(employee.getId()); } }
在映射文件中定義命名查詢語句:
- Hibernate 允許在映射文件中定義字符串形式的查詢語句
- <query> 元素用于定義一個 HQL 查詢語句,它和 <class> 元素并列
- 在程序中通過 Session 中的 getNamedQuery()方法獲取查詢語句對應的 Query 對象
public void testNamedQuery(){ Query query = session.getNamedQuery("myQuery"); List<Employee> employees = query.setInteger("minId", 100) .setInteger("maxId", 108) .list(); for(Employee employee : employees){ System.out.println(employee.getId()); } }
<query name="myQuery"><![CDATA[FROM Employee e WHERE e.id > :minId AND e.id < :maxId]]></query>
投影查詢:
- 查詢結果僅包含實體的部分屬性。通過 SELECT 關鍵字實現。
- Query 的 list 方法返回集合中包含的是數組類型的元素,每個對象數組代表查詢結果的一條記錄
- 可以在持久化類中定義一個對象的構造器來包裝投影查詢返回的記錄,使程序代碼能完全運用面向對象的語義來訪問查詢結果集
- 通過 DISTINCT 關鍵字來保證查詢結果不會返回重復元素
@Test public void testFieldQuery(){ String hql = "SELECT new Employee(e.lastName, e.department) FROM Employee e WHERE e.department = :dept"; Query query = session.createQuery(hql); Department dept = new Department(); dept.setDeptId(80); List<Employee> employees = query.setEntity("dept", dept) .list(); for(Employee employee : employees){ System.out.println(employee.getId() + ", " + employee.getLastName() +", " + employee.getDepartment().getDeptId()); } }
精誠所至,金石為開。

浙公網安備 33010602011771號