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查詢條件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章