hql語句

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

    查全部

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

代碼:
package com.zking.seven;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

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

import com.ddk.util.Book;
import com.mysql.fabric.xmlrpc.base.Array;
import com.zking.util.HibernateUtils;

/**

  • 講解hql的多種查詢方式
  • @author Administrator

*/
public class test {

private	Session session;
private Transaction transaction;
private Query query;

@Before
public void before() {
	session=HibernateUtils.openSession();
	transaction=session.beginTransaction();
}

@After
public void after() {
	transaction.commit();
	session.close();
}


/**
 * 結果返回對象
 * 查詢所有
 * select * from t_hibernate_book;
 */
@Test
public void testList1() {
	String hql="from Book";
	query = session.createQuery(hql);
	List<Book> list=query.list();
	for(Book b:list) {
		System.out.println(b);
	}
	
}
/**
 * 查詢數據庫表中的一列
 * 數據庫 :在數據庫中查詢,是不區分大小寫的
 * hql:由於你查詢的是實體類的屬性,那麼區分大小寫
 */
@Test
public void testString2() {
	String hql="select bookName from Book";
	query = session.createQuery(hql);
	List<String> list = query.list();
	for(String b: list) {
		System.out.println(b);
	}
}



/**
 * Object[]
 * 自定義MVC中的EntityBaseDao中
 * 數據庫 8列
 * 實體類 8個屬性
 * 
 * 				insert 
 * 						Book    b
 * 
 * 如果查詢的不是一張完整的表,那麼最後使用map集合
 */
@Test
public void testString3() {
	String hql="select bookId,bookName from Book";
	query = session.createQuery(hql);
	List<Object[]> list = query.list();
	for(Object[] b: list) {
		System.out.println(Arrays.toString(b));
	}
}

/**
 * 處理情況4:通過hibernate函數Map去處理
 * 函數這個詞來自於數據庫
 * 函數不區分大小寫
 */
@Test
public void testmap4() {
	String hql="select new map(bookId,bookName) from Book";
	query = session.createQuery(hql);
	List<Map> list=query.list();
	for(Map b : list) {
		System.out.println(b);
	}
}
/**
 * 
 * 處理情況5:通過構造方法進行查詢
 */
@Test
public void testmap5() {
	String hql="select new Book(bookId,bookName) from Book";
	query = session.createQuery(hql);
	List<Book> list=query.list();
	for(Book b : list) {
		System.out.println(b);
	}
}
/**
 * 講解hibernate中的佔用符的問題
 * 5版本以後棄用“?”
 * 
 * 使用方法一
 */

@Test
public void testlist6() {
	String hql="from Book where bookId =:bookId";
	query = session.createQuery(hql);
	query.setParameter("bookId", 1);
	Book book=(Book) query.getSingleResult();
	System.out.println(book);
	
}

/**
 * 使用方法二
 */
@Test
public void testlist61() {
	String hql="from Book where bookId in (:bookId)";
	query = session.createQuery(hql);
	List<Integer> bookId=new ArrayList<>();
	bookId.add(1);
	bookId.add(2);
	bookId.add(3);
	query.setParameterList("bookId", bookId);
	List list = query.list();
	for (Object object : list) {
		System.out.println(object);
	}
}

/**
 * 使用方法三
 */
@Test
public void testlist62() {
	String hql="from Book where bookId in (:bookId)";
	query = session.createQuery(hql);
	query.setParameterList("bookId", new Integer[] {2,4});
	List list = query.list();
	for (Object object : list) {
		System.out.println(object);
	}
}

/**
 * 連表查詢
 */

@Test
public void testlist7() {
	String hql="select o.orderNo,oi.productId from Order o,OrderItem oi where o.orderId = oi.order.orderId";
	List<Object[]> list = session.createQuery(hql).list();
	for (Object[] object : list) {
		System.out.println(Arrays.toString(object));
	}
}

/**
 * 連表查詢map
 */
@Test
public void testlist78() {
	String hql="select new map(o.orderNo,oi.productId) from Order o,OrderItem oi where o.orderId = oi.order.orderId";
	List<Map> list = session.createQuery(hql).list();
	for (Map object : list) {
		System.out.println(object);
	}
}

/**
 * 聚合函數	
 */

@Test
public void testlist8() {
	String hql="select count(*) from Book";
	long c = (long) session.createQuery(hql).getSingleResult();
	System.out.println(c);
}

/**
 * 分頁
 */
@Test
public void testlist9() {
	String hql="from Book";
	Query query = session.createQuery(hql);
	int p=2;
	int o=2;
	query.setFirstResult((p-1)*o);
	query.setMaxResults(o);
	List<Book> list = query.list();
	for (Book b : list) {
		System.out.println(b);
	}
}

}
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)

  1. 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);// 設置返回的最大結果集

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章