Hibernate 查詢方式(HQL/QBC/QBE)匯總,hqlqbc

來源:互聯網
上載者:User

Hibernate 查詢方式(HQL/QBC/QBE)匯總,hqlqbc

   作為老牌的 ORM 架構,Hibernate 在推動資料庫持久化層所做出的貢獻有目共睹。

   它所提供的資料查詢方式也越來越豐富,從 SQL 到自創的 HQL,再到物件導向的標準化查詢。

   雖然查詢方式有點眼花繚亂,配置使用起來也稍微有點複雜。

   但是絲毫掩蓋不了它迷人的地方,本篇部落格試著匯總 Hibernate 所有的查詢方式。

    蘿蔔青菜各有所愛,工作中可以根據自己的喜好選擇其中的幾種進行編程。

   1. HQL 方式,參數使用問號佔位(4.1 版本中已被廢棄)

public List<UserPO> getUserList(UserPO userPO) {        String hql = "from UserPO where name = ? and passwd= ?";        Query query = getHibernateSession().createQuery(hql);        query.setParameter(0, userPO.getName());        query.setParameter(1, userPO.getPasswd());        return query.list();    }

   2. HQL 方式,參數使用命名佔位

   public List<UserPO> getUserList(UserPO userPO) {        String hql = "from UserPO where name = :userName and passwd= :userPwd";        Query query = getHibernateSession().createQuery(hql);        query.setParameter("userName", userPO.getName());        query.setParameter("userPwd", userPO.getPasswd());        return query.list();    }

   3. HQL 方式,參數使用 JPA 預留位置

  public List<UserPO> getUserList(UserPO userPO) {        String hql = "from UserPO where name = ?1 and passwd= ?2";        Query query = getHibernateSession().createQuery(hql);        query.setParameter("1", userPO.getName());        query.setParameter("2", userPO.getPasswd());        return query.list();    }

   4. HQL 方式,參數使用對象綁定

   public List<UserPO> getUserList(UserPO userPO) {        String hql = "from UserPO where name = :name and passwd= :passwd";        Query query = getHibernateSession().createQuery(hql);        query.setProperties(userPO);        return query.list();    }

PS:需要注意的是具名引數佔位要與PO屬性一致,而且只能使用參數命名佔位的方式。

     當然上述的 1--4 填充查詢方式,HQL 都可以調整為SQL,是相通的。

   5. QBC(Query By Criteria) 方式,參數使用 Restrictions 對象

   public List<UserPO> getUserList(UserPO userPO) {        Criteria criteria = getHibernateSession().createCriteria(UserPO.class);        criteria.add(Restrictions.eq("name",userPO.getName()));        criteria.add(Restrictions.eq("passwd",userPO.getPasswd()));        return criteria.list();    }

   6. QBC(Query By Criteria) 方式,參數使用對象綁定

  public List<UserPO> getUserList(UserPO userPO) {        Criteria criteria = getHibernateSession().createCriteria(UserPO.class);        criteria.add(Example.create(userPO));        return criteria.list();    }

PS: QBC(Query By Criteria) 方式,使用到的關鍵抽象對象有:
     Restrictions --> 設定查詢限制條件
     Order --> 設定查詢排序條件
     Projections --> 工具類的方法進行統計和分組。

    上述 5-6 也是我最喜歡的方式,用物件導向查詢方式來迎合物件導向的編程。

   7. 離線條件查詢

 public List<UserPO> getUserList(UserPO userPO) {        DetachedCriteria detachedCriteria = DetachedCriteria.forClass(UserPO.class);        detachedCriteria.add(Restrictions.eq("name",userPO.getName()));        detachedCriteria.add(Restrictions.eq("passwd",userPO.getPasswd()));        Criteria criteria = detachedCriteria.getExecutableCriteria(getHibernateSession());        return criteria.list();    }

   離線查詢的好處,可以將查詢對象 DetachedCriteria 作為參數傳遞到 DAO層,減少 DAO 層代碼

   8. QBC(Query By Criteria) 方式,分頁查詢

   public List<UserPO> getUserList(UserPO userPO) {        Criteria criteria = getSession().createCriteria(UserPO.class);        criteria.setFirstResult(4);        criteria.setMaxResults(3);        return criteria.list();    }}

PS: 分頁查詢主要是要指定兩個參數(從什麼開始,取多少條):
     Query或者Criteria對象的 setFirstResult()和setMaxResults()

     當然8中的 Criteria  對象也可以換為 Query 對象,使用 HQL 或者 SQL 查詢方式。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.