Hibernate各種查詢操作(一)

測試數據庫如下

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

複製代碼

    測試結果:

    

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