測試數據庫如下
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();
}
}
測試結果: