1. 程式人生 > >Hibernate Hql使用

Hibernate Hql使用

  1. HQL是Hibernate Query Language的縮寫

  2. hql和sql區別/異同

HQL SQL
類名/屬性 表名/列名
區分大小寫,關鍵字不區分大小寫 不區分大小寫
別名 別名
?,從下標0開始計算位置(hibernate5之後不支援) ?,從順序1開始計算位置
:命名引數 不支援:命名引數
面向物件的查詢語言 面向結構查詢語言
  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)

  2. hql中使用佔位符
    4.1 ?佔位符
    從下標0開始計算位置
    hibernate5之後不再支援?佔位符
    4.2 :命名引數

  3. 連線查詢

  4. 聚合函式
    sum
    avg
    max
    min
    count

  5. 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);
		}
	}
	
	
	
	
	

	
	
	
	
	
	
	
	
}