1. 程式人生 > >hibernate(七)HQL(1)

hibernate(七)HQL(1)

HQL

HQL是Hibernate Query Language的縮寫

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

處理返回的結果集

1、單個物件
	/**
	 * 結果處理情況 1: Book
	 * 直接利用物件進行資料接收
	 */
	@Test
	public void testList1() {		
		String hql = "from Book";
		Query query = session.createQuery(hql);
		List<Book> list = query.list();
		for (Book book : list) {
			System.out.println(book);
		}
		
	}

在這裡插入圖片描述

2、String
/**
	 * 結果處理情況 2:String
	 * 查詢一列
	 * jdbc:查詢的是表裡面的某一列	不區分大小寫
	 * hpl:查的是實體類中的某一屬性	嚴格區分大小寫
	 */
	@Test
	public void testList2() {		
		String hql = " select bookname from Book ";
//		Query query = session.createQuery(hpl);
//		List<String> list = query.getResultList();
//		System.out.println(list);	
		List<String> list = session.createQuery(hql).list();
		System.out.println(list);	
	}

在這裡插入圖片描述

3、Object[]
	/**
	 * 結果處理情況 3:Object[]
	 */
	@Test
	public void testList3() {		
		String hql = "select bookid,bookname from Book  ";
		List<Object[]> list = session.createQuery(hql).list();
		for (Object[] book : list) {
			System.out.println(Arrays.toString(book));
		}	
	}

在這裡插入圖片描述

4、Map

這裡的map是hibernate內建函式

	
	/**
	 * 結果處理情況 4:利用hibernate內建函式進行結果處理
	 */
	@Test
	public void testList4() {	
		String hql = "select new map(bookid,bookname) from Book  ";
		List<Map> list = session.createQuery(hql).list();
		for (Map book : list) {
			System.out.println(book);
		}	
	}
	

在這裡插入圖片描述

5、構造方法

實體類提供構造方法,隨便加上無參的構造器

	/**
	 * 結果處理情況 5:利用構造方法進行結果處理
	 * 1、當你給某一個類提供有參構造器,順便加上無參構造器
	 * 2、構造方法賦值的原理(完善MVC的crud)
	 */
	@Test
	public void testList5() {	
		String hql = "select new Book(bookid,bookname) from Book  ";
		List<Book> list = session.createQuery(hql).list();
		for (Book book : list) {
			System.out.println(book);
		}	
	}

在這裡插入圖片描述

hql中使用佔位符

	/**
	 * hql中使用佔位符:
	 * jdbc:select * from Book where book_id = ?
	 * hpl:
	 * 
	 */
	@Test
	public void testList6() {	
		//一
//		String hql = "from Book where bookid = :bookid ";
//		Query query = session.createQuery(hql);
//		query.setParameter("bookid", 2);
//		Book book = (Book) query.getSingleResult();
//		System.out.println(book);
		
		//二
//		String hql = "from Book where price >  :min and price < :max ";
//		Query query = session.createQuery(hql);
//		query.setParameter("min", 10f);
//		query.setParameter("max", 30f);
//		List<Book> list = query.list();
//		for (Book book : list) {
//			System.out.println(book);
//		}
		
		//三
		String hql = "from Book where bookid in (:bookids) ";
		Query query = session.createQuery(hql);
//		new Integer[] {2,3,4}
		List<Integer> params = new ArrayList<>();
		params.add(2);
		params.add(3);
		params.add(4);
		query.setParameterList("bookids", params);
		List<Book> list = query.list();
		for (Book book : list) {
			System.out.println(book);
		}
		
	}

聚合函式

	/**
	 * 聚合函式
	 */
		
	@Test
	public void testList8() {
		String hql = "select count(*) from Book";
		Object list = session.createQuery(hql).list();
		System.out.println(list);
	}

在這裡插入圖片描述

分頁

		
	/**
	 * 分頁
	 */
	@Test
	public void testList9() {
		String hql = "from Book where bookname like :bookname ";
		int rows = 3;// 每頁行數
		int page = 1;// 頁碼
		Query query = session.createQuery(hql);
		query.setParameter("bookname", "%完美%");
		query.setFirstResult((page-1)*rows);// 設定起始記錄下標
		query.setMaxResults(rows);// 設定返回的最大結果集 
		List<Book> list = query.list();
		for (Book book : list) {
			System.out.println(book);
		}
	}

在這裡插入圖片描述