Hibernate各种查询操作(二)

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

复制代码

 7、QBC查询条件