簡體   English   中英

使用休眠查詢

[英]Working with Hibernate Queries

我是休眠查詢的新手,試圖了解一切的工作原理。 我正在將Hibernate 3與Netbeans 6.5一起使用。

我已經建立了一個基本項目,並且一直在嘗試如何做所有事情。 我基本上是從搜索查詢開始的。 用戶可以在其中將值輸入一個或多個字段的位置。

為便於說明,該表將是Person,其列first_name,middle_name,last_name。

我發現的第一種方法是擁有一個將firstName,middleName和lastName作為參數的方法:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
String query = "from Person where (first_name = :firstName or :firstName is null) "+
               "and (middle_name = :middleName or :middleName is null) "
               "and (last_name = :lastname or :lastName is null)";
Query q = session.createQuery(query);
q.setString("firstName", firstName);
q.setString("middleName", middleName);
q.setString("lastName", lastName);
List<Person> results = (List<Person>) q.list();

這對我來說並不令人滿意,因為似乎我不必寫那么多東西,而且,我做錯了。 因此,我不斷挖掘並找到了另一種方法:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria crit = session.createCriteria(Person.class);
if (firstName != null) {
     crit.add(Expression.eq("firstName", firstName);
}
if (middleName != null) {
     crit.add(Expression.eq("middleName", middleName);
}
if (lastName != null) {
     crit.add(Expression.eq("lastName", lastName);
}
List<Person> results = (List<Person>) crit.list();

因此,我試圖弄清楚的是,哪種方式是此類查詢的首選方式? 條件還是查詢? 為什么?

我猜想Criteria是首選方法,並且出於性能類型的原因,僅應在需要手工編寫Query時使用Query。 我靠近嗎?

標准是首選方式。 它在后台使用Prepared Statements,因此您不必擔心SQL注入。

標准是更新的方法。 它是在hql查詢層之后引入的。 在Criteria API下仍會生成hql。 我傾向於使用Criteria API,因為代碼看起來更簡潔並且更易於維護。

我相信編寫查詢是很常見的,特別是當您要進行復雜的查詢時,Hibernate有自己的查詢語言。

檢查休眠查詢語言HQL

條件是進行動態查詢的最佳方法。 無需對參數進行空檢查,只需不添加該條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM