一、QBC的查詢方式
使用QBC不在需要寫hql語句,而是使用criteria對象的各種方法來實現。
1、查詢所有
//使用QBC方式查詢所有
@Test
public void test11(){
SessionFactory sessionFactory = null;
Session session =null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
//1、創建criteria對象,指定要查詢的實體類的名稱
Criteria criteria = session.createCriteria(Good.class);
//2、調用方法得到數據
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
}finally{
session.close();
sessionFactory.close();
}
}
2、條件查詢
(1)準確查詢
// 使用QBC方式查詢名稱爲蘋果,並且描述爲蘋果的記錄
@Test
public void test12() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、創建criteria對象,指定要查詢的實體類的名稱
Criteria criteria = session.createCriteria(Good.class);
/**
* 使用方法設置查詢條件
* 使用criteria的add方法添加條件
* 使用Restrictios的靜態方法設置條件
*/
criteria.add(Restrictions.eq("gname", "蘋果"));
criteria.add(Restrictions.eq("gmono", "蘋果"));
// 2、調用方法得到數據
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
(2)模糊查詢
// 使用QBC方式查詢名稱中有蘋字的記錄
@Test
public void test13() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、創建criteria對象,指定要查詢的實體類的名稱
Criteria criteria = session.createCriteria(Good.class);
/**
* 使用方法設置查詢條件 使用criteria的add方法添加條件 使用Restrictios的靜態方法設置條件
*/
criteria.add(Restrictions.like("gname", "%蘋%"));
// 2、調用方法得到數據
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
3、排序查詢
(1)正序查詢
// 使用QBC方式查詢以id的升序來查詢 數據
@Test
public void test14() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、創建criteria對象,指定要查詢的實體類的名稱
Criteria criteria = session.createCriteria(Good.class);
/**
* 使用方法設置查詢條件
* 使用criteria的addOrder方法添加排序
* 使用Order的靜態方法設置排屬性
*/
criteria.addOrder(Order.asc("gid"));
// 2、調用方法得到數據
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
(2)將序查詢:
// 使用QBC方式查詢以id的將序來查詢 數據
@Test
public void test15() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、創建criteria對象,指定要查詢的實體類的名稱
Criteria criteria = session.createCriteria(Good.class);
/**
* 使用方法設置查詢條件
* 使用criteria的addOrder方法添加排序
* 使用Order的靜態方法設置排屬性
*/
criteria.addOrder(Order.desc("gid"));
// 2、調用方法得到數據
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
4、分頁查詢
// 使用QBC方式每次查詢5條數據
@Test
public void test16() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、創建criteria對象,指定要查詢的實體類的名稱
Criteria criteria = session.createCriteria(Good.class);
//設置第一個要查詢記錄的位置
criteria.setFirstResult(0);
//2、設置每頁最大的記錄是
criteria.setMaxResults(5);
// 2、調用方法得到數據
List<Good> list = criteria.list();
for (Good good : list) {
System.out.println(good);
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
5、統計查詢
// 使用QBC方式查詢記錄數
@Test
public void test17() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、創建criteria對象,指定要查詢的實體類的名稱
Criteria criteria = session.createCriteria(Good.class);
criteria.setProjection(Projections.rowCount());
// 2、調用方法得到數據
Object object = criteria.uniqueResult();
Long long1 = (Long) object;
int count = long1.intValue();
System.out.println(count);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}
6、離線查詢
// 使用QBC方式離線查詢
@Test
public void test18() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getFactory();
session = sessionFactory.openSession();
tx = session.beginTransaction();
// 1、創建DetachedCriteria對象,指定要查詢的實體類的名稱
DetachedCriteria cDetachedCriteria = DetachedCriteria.forClass(Good.class);
//2、得到criteria對象(最終執行時纔用到session)
Criteria criteria = cDetachedCriteria.getExecutableCriteria(session);
criteria.setProjection(Projections.rowCount());
// 3、調用方法得到數據
Object object = criteria.uniqueResult();
Long long1 = (Long) object;
int count = long1.intValue();
System.out.println(count);
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
sessionFactory.close();
}
}