1. 程式人生 > >hibernate hql 查詢返回結果型別

hibernate hql 查詢返回結果型別

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

演示:

/**
	 * 一、結果  返回物件
	 * 查詢所有
	 */
	@Test
	public void testList1() {
		String hql = "from Book";
		Query query = session.createQuery(hql);
		List<Book> list = query.list();
		list.forEach(System.out::println);
	}
	
	/**
	 * 二、查詢資料庫表中的一列
	 * sql:在資料庫表中查詢,不區分大小寫
	 * hql:由於查詢的是實體類的屬性,區分大小寫
	 */
	@Test
	public void testList2() {
	       String hql = "select bookName from Book";
	       List<String> list = session.createQuery(hql).list();
	       list.forEach(System.out::println);
	}
	
	
	/**
	 * Object[]
	 * 三、如果不是查詢一張表  最好使用map
	 */
	@Test
	public void testList3() {
		String hql = "select bookId,bookName from Book";
		Query query = session.createQuery(hql);
		List<Object[]> list = query.list();
		list.forEach(System.out::println);
	}
	
	/**
	 * 四、通過hibernate函式Map去處理
	 * 函式不區分大小寫
	 */
	@Test
	public void testList4() {
		String hql = "select new map(bookId,bookName) from Book";
		Query query = session.createQuery(hql);
		List<Map> list = query.list();
		list.forEach(System.out::println);
		
	}
	
	/**
	 * 五、通過構造方法查詢
	 * 
	 * 注意:新建了一個有參的構造方法,預設的無參構造方法就沒有了
	 * 需要補一個無參的構造方法
	 */
	@Test
	public void testList5() {
		String hql = "select new Book(bookId,bookName) from Book";
		Query query = session.createQuery(hql);
		List<Book> list = query.list();
		list.forEach(System.out::println);
	}
	
	/**
	 * 六、hql佔位符
	 * 5版本之後不用"?"
	 */
	
	@Test
	public void testList6() {
	    String hql = "from Book where bookId = :bookId";
	    Query query = session.createQuery(hql);
	    query.setParameter("bookId", 1);
	    Book book = (Book) query.getSingleResult();
	    System.out.println(book);
	    
	}
	
	/**
	 * 連表查詢
	 */
	@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();
         list.forEach(System.out::println);
	}
	
	/**
	 * 聚合函式
	 */
	@Test
	public void testList8() {
	       String hql ="select count(*) from Book ";
		   Long count = (Long) session.createQuery(hql).getSingleResult();
		   System.out.println("count:"+count);
	}
	
	
	/**
	 * 分頁
	 */
	@Test
     public void testList9() {	
		String hql="from Book";
    	 Query query = session.createQuery(hql);
    	 int page=2;
    	 int ofset = 3;
    	 query.setFirstResult((page-1)*ofset);//起始下標
    	 query.setMaxResults(ofset);
    	 List<Book> list = query.list();
    	 list.forEach(System.out::println);
     }