一、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(); } }