Hibernate Hql使用
阿新 • • 發佈:2018-11-03
-
HQL是Hibernate Query Language的縮寫
-
hql和sql區別/異同
HQL | SQL |
---|---|
類名/屬性 | 表名/列名 |
區分大小寫,關鍵字不區分大小寫 | 不區分大小寫 |
別名 | 別名 |
?,從下標0開始計算位置(hibernate5之後不支援) | ?,從順序1開始計算位置 |
:命名引數 | 不支援:命名引數 |
面向物件的查詢語言 | 面向結構查詢語言 |
-
處理返回的結果集
3.1 單個物件
select沒有逗號
3.2 Object[]
b.bookId, b.bookName
3.3 Map
new Map(b.bookId as bid, b.bookName as bname)
3.4 new 構造方法(attr1,attr2)
new Book(b.bookId, b.price) -
hql中使用佔位符
4.1 ?佔位符
從下標0開始計算位置
hibernate5之後不再支援?佔位符
4.2 :命名引數 -
連線查詢
-
聚合函式
sum
avg
max
min
count -
hql分頁
int page = 2;// 頁碼:page
int row = 10;// 每頁行數:rows
query.setFirstResult((page - 1) * row);// 設定起始記錄下標
query.setMaxResults(row);// 設定返回的最大結果集
package com.test; import java.util.Arrays; import java.util.List; import java.util.Map; import org.hibernate.Session; import org.hibernate.query.Query; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.hibernateOut.entity.Order; import com.hibernateOut.entity.Orderitem; import com.more.entity.Book; import com.strurts.utli.HibernateUtils; public class HibernateTest { private Session session; @Before public void before() { session = HibernateUtils.openSession(); } @After public void after() { HibernateUtils.closesessionn(); } /** * */ @Test public void text1() { String hql="from Book"; List<Book> list = session.createQuery(hql).list(); for (Book book : list) { System.out.println(book); } } /** * 結果處理二: * 查詢資料庫中的一列 * 資料庫:在資料庫中查詢不區分大小寫 * hql:由於查詢的是實體類的屬性,所以區分大小寫 */ @Test public void text2() { String hql="select bookName from Book"; Query query = session.createQuery(hql); List<String> list = query.list(); for (String name : list) { System.out.println(name); } } /** * 結果方式三: * 查詢多個列 Object[] */ @Test public void text3() { String hql="select bookId,bookName from Book"; Query query = session.createQuery(hql); List<Object[]> list = query.list(); for (Object[] name : list) { System.out.println(Arrays.toString(name)); } } /** * 結果處理四:通過Hibernate裡面的map 函式 * 函式這個詞出自資料庫 * 函式不區分大小寫 * 查詢多個列 new map */ @Test public void text4() { String hql="select new map(bookId,bookName) from Book"; Query query = session.createQuery(hql); List<Map> list = query.list(); for (Map name : list) { System.out.println(name); } } /** * 處理情況五: * 使用實體類構造器 */ @Test public void text5() { String hql="select new Book(bookId,bookName) from Book"; Query query = session.createQuery(hql); List<Book> list = query.list(); for (Book name : list) { System.out.println(name); } } /** * Hibernate中的佔位符 * 5版本以後棄用(?) * * Hibername的命名引數 : */ @Test public void text6() { String hql="from Book where bookName= :bookIds"; Query query = session.createQuery(hql); query.setParameter("bookIds", "西遊記"); List<Book> list = query.list(); System.out.println(list.get(0)); } /** * Hibernate中的佔位符 * 接收陣列查詢 * */ @Test public void text7() { String hql="from Book where bookId in (:bookIds)"; Query query = session.createQuery(hql); // List<Integer> bookIds=new ArrayList<>(); // bookIds.add(1); // bookIds.add(2); // bookIds.add(3); // // query.setParameterList("bookIds", bookIds); query.setParameterList("bookIds", new Integer[] {2,3}); List<Book> list = query.list(); for (Book book : list) { System.out.println(book); } } /** * Hibernate中的連線查詢 * */ @Test public void text8() { String hql="select oi from Order o,Orderitem oi where o.order_id = oi.order.order_id "; Query query = session.createQuery(hql); List<Orderitem> list = query.list(); for (Orderitem order : list) { System.out.println(order); } } /** * Hibernate中的分頁 * 7. hql分頁 int page = 2;// 頁碼:page int row = 10;// 每頁行數:rows query.setFirstResult((page - 1) * row);// 設定起始記錄下標 query.setMaxResults(row);// 設定返回的最大結果集 */ @Test public void text9() { String hql=" from Book"; Query query = session.createQuery(hql); int page=2; int row=2; query.setFirstResult((page-1)*row); query.setMaxResults(row*page); List<Book> list = query.list(); // for (Book book : list) { System.out.println(book); } } }