1. 程式人生 > >hibernate查詢語言

hibernate查詢語言

  1. 什麼是hql HQL是Hibernate Query Language的縮寫

    查全部

  2. hql和sql區別/異同 HQL SQL 類名/屬性 表名/列名 區分大小寫,關鍵字不區分大小寫 不區分大小寫 別名 別名 ?,從下標0開始計算位置(hibernate5之後不支援) ?,從順序1開始計算位置 :命名引數 不支援:命名引數 面向物件的查詢語言 面向結構查詢語言

    注1:QuerySyntaxException:book is not mapped

  3. 處理返回的結果集 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)

  4. hql中使用佔位符 4.1 ?佔位符 從下標0開始計算位置 hibernate5之後不再支援?佔位符

4.2 :命名引數

  1. 連線查詢

  2. 聚合函式 sum avg max min count

  3. hql分頁 int page = 2;// 頁碼:page int row = 10;// 每頁行數:rows query.setFirstResult((page - 1) * row);// 設定起始記錄下標 query.setMaxResults(row);// 設定返回的最大結果集

程式碼測試示例

package com.seven.text;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.five.entity.Book;
import com.two.util.SessionFactoryUtil;
/**
 * @author zr176
 *
 */
public class HqlTest {
	private Session session;
	private Transaction beginTransaction;
	@Before
	public void before() {
		session=SessionFactoryUtil.getSession();
		beginTransaction = session.beginTransaction();
	}
	
	@After
	public void after() {
		beginTransaction.commit();
		SessionFactoryUtil.closeSession();
	}
	/*
	 * 	結果處理情況1:
	 * 	直接通過物件進行資料接收
	 * */
	@Test
	public void test1() {
		String hql ="from Book";
		Query createQuery = session.createQuery(hql);
		List<Book> list = createQuery.list();
		for (Book b : list) {
			System.out.println(b);
		}
	}
	
	/*
	 * 	結果處理情況2:
	 *	查一列
	 *	查的是實體類的某一屬性,嚴格區分大小寫
	 * */
	@Test
	public void test2() {
		String hql ="select bookName from Book";
		List<String> list = session.createQuery(hql).list();
		for (String string : list) {
			System.out.println(string);
		}
	}
	
	/*
	 * 	結果處理情況3:
	 *	查兩個欄位
	 *	用Object陣列接收
	 * */
	@Test
	public void test3() {
		String hql ="select bookId,bookName from Book";
		List<Object[]> list = session.createQuery(hql).list();
		for (Object[] o: list) {
			System.out.println(Arrays.toString(o));
		}
	}
	
	/*
	 * 	結果處理情況4:利用hibernate內建函式進行處理
	 *	查兩個欄位
	 *	map接收
	 * */
	@Test
	public void test4() {
		String hql ="select new map(bookId,bookName) from Book";
		List<Map> list = session.createQuery(hql).list();
		for (Map o: list) {
			System.out.println(o);
		}
	}
	
	
	/*
	 * 	結果處理情況5:利用構造方法賦值
	 * */
	@Test
	public void test5() {
		String hql ="select new Book(bookId,bookName) from Book";
		List<Book> list = session.createQuery(hql).list();
		for (Book o: list) {
			System.out.println(o);
		}
	}	
	
	
	
	
	
	
	
	
	
	
}