測試數據庫如下
t_sort表: t_good表:
一、對象導航方式查詢
查詢所有食品類下面的食品
代碼:
//對象導航查詢 @Test public void Test1(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); //1、使用get方法查詢出食品類 Sort food = session.get(Sort.class, 1); //2、使用sort對象的方法得到所有食品類中的食品 Set<Good> set = food.getSetGoods(); //3、遍歷set集合 for (Good good : set) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ session.close(); sessionFactory.close(); } }
查詢結果:
二、OID查詢
OID查詢就是根據id查詢某一條記錄
代碼
//OID查詢方式 @Test public void Test2(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); //OID查詢就是使用get方法查詢出一條記錄 Sort food = session.get(Sort.class, 1); System.out.println(food); tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ session.close(); sessionFactory.close(); } }
結果
三、HQL查詢
hql查詢是使用Hibernate Query Language進行的一種查詢方式,在這種查詢方式中必須要寫hql語句才能查詢。
1、查詢所有
查詢所有的hql語句格式為:from 實體類名稱(以查詢所有商品為例)
代碼:
// HQL查詢所有。查詢所有商品為例 @Test public void Test3() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、得到Query對象,並寫入hql語句 Query query = session.createQuery("from Good"); //2、使用Query對象的list方法得到數據集合 List<Good> list = query.list(); //3、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
測試結果:
2、條件查詢
條件查詢有准確查詢和模糊查詢,使用hql語句完成。
(1)准確查詢hql語句:from 實體類名 where 實體屬性名 = ? and 實體類屬性名 = ?。
准確查詢代碼:
// HQL准確條件查詢。查詢名字為面包,描述為奶油面包的記錄 @Test public void Test4() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、得到Query對象,並寫入hql語句 Query query = session.createQuery("from Good where gname = ? and gmono =?"); //2、填寫上一步中占位符的內容 query.setParameter(0, "面包"); query.setParameter(1, "奶油面包"); //3、使用Query對象的list方法得到數據集合 List<Good> list = query.list(); //3、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
查詢結果:
(2)模糊查詢hql語句:from 實體類名 where 實體類屬性名 like ?。
模糊查詢代碼:
// HQL模糊條件查詢。查詢名字中有"手"字的記錄 @Test public void Test5() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、得到Query對象,並寫入hql語句 Query query = session.createQuery("from Good where gname like ?"); // 2、填寫上一步中占位符的內容 query.setParameter(0, "%手%"); // 3、使用Query對象的list方法得到數據集合 List<Good> list = query.list(); // 3、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
模糊查詢結果:
3、排序查詢
排序查詢hql語句:正序: form 實體類名稱 order by 實體類屬性名 asc
倒序:from 實體類名稱 order by 實體類屬性名 desc
(1)正序查詢代碼
// HQL排序條件查詢。gid正序查詢 @Test public void Test6() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、得到Query對象,並寫入hql語句 Query query = session.createQuery("from Good order by gid asc"); // 2、使用Query對象的list方法得到數據集合 List<Good> list = query.list(); // 3、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
正序查詢測試結果:
(2)倒序查詢代碼:
// HQL排序查詢。gid倒序查詢 @Test public void Test7() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、得到Query對象,並寫入hql語句 Query query = session.createQuery("from Good order by gid desc"); // 2、使用Query對象的list方法得到數據集合 List<Good> list = query.list(); // 3、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
倒序查詢測試結果:
4、分頁查詢
在mysql數據庫中分頁使用limit實現,在Hibernate中使用Query對象的兩個方法實現。
分頁查詢代碼:
// HQL分頁查詢。每頁3條數據查詢 @Test public void Test8() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、得到Query對象,並寫入hql語句 Query query = session.createQuery("from Good"); //2、使用Query的方法實現分頁 //2.1設置第一個要查詢的位置(計算公式:(當前頁數-1)*每頁的記錄數) query.setFirstResult(0); //2.2設置每頁顯示的最大記錄數 query.setMaxResults(3); // 2、使用Query對象的list方法得到數據集合 List<Good> list = query.list(); // 3、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
測試結果:
5、投影查詢
投影查詢概念:查詢的不是表中的所有字段,而是一部分字段
代碼:
// HQL投影查詢。查詢Good的name @Test public void Test9() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、得到Query對象,並寫入hql語句 Query query = session.createQuery("select gname from Good"); //2、獲取結果 List<Object> list =query.list(); for (Object object : list) { System.out.println(object); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
測試結果:
6、聚集函數查詢
常用聚集函數:count avg max min sum
以count為例進行說明
hql語句:select count(*) from 實體類名稱
代碼:
// HQL投影查詢。查詢Good的name @Test public void Test10() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 1、得到Query對象,並寫入hql語句 Query query = session.createQuery("select count(*) from Good"); //2、獲取結果(結果為long類型) Object obj = query.uniqueResult(); //3、轉化為long(類型為long,轉為int會報錯) Long long1 = (Long) obj; int count = long1.intValue(); System.out.println(count); tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
測試結果: