測試數據庫以下mysql
t_sort表: t_good表:sql
查詢全部食品類下面的食品數據庫
代碼:session
//對象導航查詢 @Test public void Test1(){ SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); //一、使用get方法查詢出食品類 Sort food = session.get(Sort.class, 1); //二、使用sort對象的方法獲得全部食品類中的食品 Set<Good> set = food.getSetGoods(); //三、遍歷set集合 for (Good good : set) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); }finally{ session.close(); sessionFactory.close(); } }
查詢結果:函數
OID查詢就是根據id查詢某一條記錄測試
代碼spa
//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(); } }
結果3d
hql查詢是使用Hibernate Query Language進行的一種查詢方式,在這種查詢方式中必需要寫hql語句才能查詢。code
查詢全部的hql語句格式爲:from 實體類名稱(以查詢全部商品爲例)orm
代碼:
// HQL查詢全部。查詢全部商品爲例 @Test public void Test3() { SessionFactory sessionFactory = null; Session session = null; Transaction tx = null; try { sessionFactory = HibernateUtils.getFactory(); session = sessionFactory.openSession(); tx = session.beginTransaction(); // 一、獲得Query對象,並寫入hql語句 Query query = session.createQuery("from Good"); //二、使用Query對象的list方法獲得數據集合 List<Good> list = query.list(); //三、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
測試結果:
條件查詢有準確查詢和模糊查詢,使用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(); // 一、獲得Query對象,並寫入hql語句 Query query = session.createQuery("from Good where gname = ? and gmono =?"); //二、填寫上一步中佔位符的內容 query.setParameter(0, "麪包"); query.setParameter(1, "奶油麪包"); //三、使用Query對象的list方法獲得數據集合 List<Good> list = query.list(); //三、遍歷集合獲取數據 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(); // 一、獲得Query對象,並寫入hql語句 Query query = session.createQuery("from Good where gname like ?"); // 二、填寫上一步中佔位符的內容 query.setParameter(0, "%手%"); // 三、使用Query對象的list方法獲得數據集合 List<Good> list = query.list(); // 三、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
模糊查詢結果:
排序查詢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(); // 一、獲得Query對象,並寫入hql語句 Query query = session.createQuery("from Good order by gid asc"); // 二、使用Query對象的list方法獲得數據集合 List<Good> list = query.list(); // 三、遍歷集合獲取數據 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(); // 一、獲得Query對象,並寫入hql語句 Query query = session.createQuery("from Good order by gid desc"); // 二、使用Query對象的list方法獲得數據集合 List<Good> list = query.list(); // 三、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
倒序查詢測試結果:
在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(); // 一、獲得Query對象,並寫入hql語句 Query query = session.createQuery("from Good"); //二、使用Query的方法實現分頁 //2.1設置第一個要查詢的位置(計算公式:(當前頁數-1)*每頁的記錄數) query.setFirstResult(0); //2.2設置每頁顯示的最大記錄數 query.setMaxResults(3); // 二、使用Query對象的list方法獲得數據集合 List<Good> list = query.list(); // 三、遍歷集合獲取數據 for (Good good : list) { System.out.println(good); } tx.commit(); } catch (Exception e) { tx.rollback(); } finally { session.close(); sessionFactory.close(); } }
測試結果:
投影查詢概念:查詢的不是表中的全部字段,而是一部分字段
代碼:
// 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(); // 一、獲得Query對象,並寫入hql語句 Query query = session.createQuery("select gname from Good"); //二、獲取結果 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(); } }
測試結果:
六、彙集函數查詢
經常使用匯集函數: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(); // 一、獲得Query對象,並寫入hql語句 Query query = session.createQuery("select count(*) from Good"); //二、獲取結果(結果爲long類型) Object obj = query.uniqueResult(); //三、轉化爲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(); } }
測試結果: