Hibernate 框架 -HQL 語法


  HQL ( Hibernate Query Language ) 查詢語言是面向對象的查詢語言,也是在 Hibernate 中最常見的。其語法和 SQL 語法有一些相似,功能十分強大,幾乎支持除特殊 SQL 擴展外的所有查詢功能。此種查詢方式為 Hibernate 官方推薦的標准查詢方式。

  以下我直接使用上一篇文章配置好的持久化類和工具類來寫。

  這篇文章我多以代碼的形式來說明 HQL 語法的使用。

1、基本語法查詢

// 基本語法

    @Test
    public void fun1() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();
        // -----------------------------------------------------
        String hql = "from Customer";
        Query query = session.createQuery(hql);
        List<Customer> list = query.list();
        System.out.println(list);

        // -----------------------------------------------------
        tx.commit();
        session.close();
    }

2、條件查詢

// 條件查詢

    @Test
    public void fun2() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();
        // -----------------------------------------------------
        String hql = "from Customer where cust_id = ?";
        String hql1 = "from Customer where cust_id = :id";//另外一種查詢語句寫法
        Query query = session.createQuery(hql1);
        // query.setParameter(0, 2l);
        query.setParameter("id", 2l);
        List<Customer> list = query.list();
        System.out.println(list);

        // -----------------------------------------------------
        tx.commit();
        session.close();
    }

3、排序查詢

// 排序

    @Test
    public void fun3() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();
        // -----------------------------------------------------
        String hql = "from Customer order by cust_id asc";// asc:升序 desc:降序
        Query query = session.createQuery(hql);
        List<Customer> list = query.list();
        System.out.println(list);

        // -----------------------------------------------------
        tx.commit();
        session.close();
    }

4、分頁查詢

// 分頁查詢

    @Test
    public void fun4() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();
        // -----------------------------------------------------
        String hql = "from Customer";
        Query query = session.createQuery(hql);
        // 開始的下標=(當前頁數-1)*每頁條數
        query.setFirstResult(0);
        query.setMaxResults(3);
        List<Customer> list = query.list();
        System.out.println(list);

        // -----------------------------------------------------
        tx.commit();
        session.close();
    }

5、聚合函數查詢

// 統計查詢
    // count
    // sum
    // avg
    // max
    // min

    @Test
    public void fun5() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();
        // -----------------------------------------------------
        String hql1 = "select count(*) from Customer"; // 統計條數
        String hql2 = "select sum(cust_id) from Customer"; // 求和
        String hql3 = "select avg(cust_id) from Customer"; // 求平均值
        String hql4 = "select max(cust_id) from Customer"; // 求最大值
        String hql5 = "select min(cust_id) from Customer"; // 求最小值
        Query query = session.createQuery(hql3);
        Number result = (Number) query.uniqueResult();
        System.out.println(result);

        // -----------------------------------------------------
        tx.commit();
        session.close();
    }

6、投影查詢

// 投影查詢

    @Test
    public void fun6() {
        Session session = HibernateUtils.openSession();
        Transaction tx = session.beginTransaction();
        // -----------------------------------------------------

        String hql1 = "select new Customer(cust_id,cust_name) from Customer";
        Query query = session.createQuery(hql1);
        List<Customer> list = query.list();
        System.out.println(list);

        // -----------------------------------------------------
        tx.commit();
        session.close();
    }

  

  以上查詢都是單表查詢,沒有涉及多表查詢,多表查詢等我們熟悉好這幾個查詢,才繼續學習多表查詢。多表查詢比單表查詢復雜一點點。


免責聲明!

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



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