hibernate hql 查詢返回結果型別
阿新 • • 發佈:2018-12-18
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); }