Hibernate 教程(四)[HQL]
阿新 • • 發佈:2018-12-23
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);
}
}