Hibernate入門(六)---------HQL語句
Query:
代表面向物件的一個Hibernate查詢操作.在Hibernate中,通常使用session.createQuery()方法接收一個HQL語句,然後呼叫Query的
list()或uniqueResult()方法執行查詢。所謂的HQL是Hibernate Query Language縮寫,其語法很像SQL,但它是完全面向物件的。
在Hibernate中使用Query物件的步驟,具體:
1.獲得Hibernate的Session物件
2.編寫HQL語句
3.呼叫session.createQuery()建立查詢物件
4.如果HQL語句包含引數,則呼叫Query的setXxx設定引數
5.呼叫Query物件的list(),或uniqueResult()方法執行查詢。
①查詢所有記錄
@Test
public void fun3(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Student";
Query query = session.createQuery(hql);
List<Student> list = query.list();
System.out.println(list);
}
②條件查詢
public void fun4(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Student Where sno = ?";
Query query = session.createQuery(hql);
query.setInteger(0, 1001);
Student stu = (Student) query.uniqueResult();
session.close();
System.out.println(stu.getGender());
}
③條件查詢(命名識別符號)
public void fun5(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Student where sname = :aaa and sage = :bbb";
Query query = session.createQuery(hql);
query.setString("aaa","張三");
query.setInteger("bbb", 25);
List<Student> list = query.list();
session.close();
System.out.println(list.get(0).getName());
}
④分頁查詢
public void fun6(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
String hql = "from Student";
Query query = session.createQuery(hql);
//相當於 limit 1,3
query.setFirstResult(1);
query.setMaxResults(3);
List<Student> list = query.list();
session.close();
System.out.println(list);
}
Query中除了list()方法查詢全部資料之外,還有一些其它常用方法,具體如下:
setter()方法:Query介面中提供了一系列的setter方法用於設定查詢語句的引數,針對不同的資料型別,需要用到不同的setter方法。
iterator()方法:該方法用於查詢語句,返回的結果是Iterator物件,在讀取時只能按照順序方式讀取,它僅把使用到的資料轉換成Java實體物件。
uniqueResult()方法:該方法用於返回唯一的結果,在確保只有一條記錄的查詢時可以使用該方法。
executeUpdate()方法:該方法是Hibernate3的新特性,它支援HQL語句的更新和刪除操作。
setFirstResult()方法:該方法可以設定獲取第一個記錄的位置,也就是它表示從第幾條記錄開始查詢,預設從0開始計算
setMaxResult()方法:該方法用於設定結果集的最大記錄數,通常與setFirstResult()方法結合使用,用於限制結果集的範圍,以實現分頁功能。
Criteria是一個完全面向物件,可擴充套件的條件查詢API,通過它完全不需要考慮資料庫底層如何實現,以及SQL語句如何編寫,它是Hibernate框架的核心查詢物件。
Criteria查詢,又稱QBC查詢(Query By Criteria)它是Hibernate的另一種物件檢索方式。org.hibernate.criterion.Criterion是Hibernate提供的一個面向物件查詢條件介面,一個單獨的查詢就是Criterion介面的一個例項,用於限制Criteria物件的查詢,在Hibernate中Criterion物件的建立是通過Restrictions工廠類完成的,它提供了條件查詢方法。通常:使用Criteria物件查詢資料的主要步驟:
1)獲得Hibernate的Session物件。
2)通過Session獲得Criteria物件。
3)使用Restrictions的靜態方法建立Criterion條件物件。(Restrictions類中提供了一系列用於設定查詢條件的靜態方法,這些靜態方法都返回Criterion例項,每個Criterion例項代表一個查詢條件。)
4)向Criteria物件中新增Criterion查詢條件。Criteria的add()方法用於加入查詢條件。
5)執行Criteria的list()或uniqueResult()獲得結果。
①查詢所有記錄
@Test
public void fun7(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Student.class);
List<Student> list = criteria.list();
session.close();
System.out.println(list);
}
②條件查詢
@Test
public void fun8(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Student.class);
criteria.add(Restrictions.eq("name", "張三"));
List<Student> list = criteria.list();
session.close();
System.out.println(list);
}
③分頁查詢
@Test
public void fun9(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria criteria = session.createCriteria(Student.class);
criteria.setFirstResult(1);
criteria.setMaxResults(3);
List<Student> list = criteria.list();
session.close();
System.out.println(list);
}
SQLQuery這個介面用於接收一個sql語句進行查詢,然後呼叫list()或者uniqueResult()方法進行查詢。但是sql語句不會直接封裝到實體物件中,需要我們手動寫程式碼才可以封裝到實體中
@Test
public void fun10(){
Session session = HibernateUtils.getCurrentSession();
Transaction tx = session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery("SELECT *FROM student");
List<Object[]> list = sqlQuery.list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
session.close();
}