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

    測試結果:

    

 

 

 

 

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM