1. 程式人生 > >Hibernate 教程(四)[HQL]

Hibernate 教程(四)[HQL]

HQL瞭解

官方文件

Hibernate查詢語言(HQL)和Java永續性查詢語言(JPQL)都是面向物件模型的查詢語言,本質上類似於SQL。

演示程式碼

package query;

import java.util.Arrays;
import java.util.List;

import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.junit.jupiter.api.Test; import orm.entity.Event; import util.SessionUtil; /** * HQL語句測試 */ public class HQLTest { private Session session = SessionUtil.getSession(); private Transaction transaction = session.beginTransaction(); private String hql; // 查詢所有 @Test public void test01
() { // form 後面是實體類名,不是表面,通過類物件來查詢 hql = "from Event"; Query<Event> query = session.createQuery(hql, Event.class); System.out.println(query.list()); transaction.commit(); } // 帶引數查詢 @Test public void test02() { // 格式: ?1, ?2, ?3 hql = "from Event where id = ?1 and title = ?2"; Query<
Event>
query = session.createQuery(hql, Event.class); // 第幾個引數, 引數值 query.setParameter(1, Long.valueOf(1)); query.setParameter(2, "標題一"); System.out.println(query.list()); transaction.commit(); } // 帶引數查詢 @Test public void test03() { // 格式: :id, :name, :abc, :asdasudyu hql = "from Event where id = :id"; Query<Event> query = session.createQuery(hql, Event.class); // 第幾個引數, 引數值 query.setParameter("id", Long.valueOf(1)); System.out.println(query.list()); transaction.commit(); } // 查詢指定欄位 @Test public void test04() { // 實體類的屬性名: id, title, date hql = "select title from Event"; // 這個Query查詢的就不是物件了,而是物件陣列 // 需要滾動結果集接收,不懂的檢視一下官方文件,或者API, 類似於Result ScrollableResults scrollableResults = session.createQuery(hql).scroll(); while (scrollableResults.next()) { Object[] row = scrollableResults.get(); System.out.println(Arrays.toString(row)); } } // 分頁查詢 @Test public void test05() { hql = "from Event"; int first = 0; // 從第幾行開始 int size = 10; // 每頁的大小 Query<Event> query = session.createQuery(hql, Event.class); query.setFirstResult(first); query.setMaxResults(size); List<Event> events = query.list(); for (int i = 0; i < events.size(); i++) { Event event = events.get(i); System.out.println(event); } } /** * 聚集函式的使用 */ @Test public void test06() { hql = "SELECT count(*) FROM Event"; Object obj = session.createQuery(hql).getSingleResult(); System.out.println(obj); } }