2016-04-09 193 views
-1

我是一個新手在休眠,並開始工作。我正在嘗試使用hibernate作爲我的項目之一,其中包含一個簡單的登錄頁面。 有人(高級)告訴我爲什麼要使用hibernate進行這樣一個簡單的查詢,它會有性能問題,我應該在該頁面上使用簡單的JDBC。簡單查詢休眠

任何人都可以建議我什麼類型的查詢,我可以在休眠使用?

感謝

+0

你可以閱讀這個:http://stackoverflow.com/questions/1607819/weaknesses-of-hibernate?rq=1 –

+0

我沒有什麼錯的問題,有人剛剛投了票。也許紳士誰降低了它可以解釋? – aatif

+1

@JoseLuis感謝您的回覆,我已經閱讀了答案..我很困惑,在我的應用程序中爲一些頁面使用JDBC確實是個好主意。 – aatif

回答

0

的性能問題是無處不在,不是唯一的冬眠所以這一切都取決於你如何組織你的項目,因爲即使是在JDBC例如有一個地方的Statement使用PreparedStatement的一個有力的論據。在休眠中,您可以使用HSQL或選擇更酷的Criteria API。我實際上更喜歡Criteria API,因爲我不必寫任何查詢,所以我把它留給Hibernate引擎。

因此,假設你有一個表中調用的數據庫Users,它包含了用戶的登錄用戶名和密碼,一個簡單的boolean方法這樣會竭誠爲您服務非常好,你可以看到,你不需要寫任何查詢。這實際上使您的應用程序在數據庫方面更加獨立,因爲它可以在很少的變化下用於大多數數據庫

public static boolean userExists(String userName, String userPassword) { 
     Session session = HibernateUtil.getSessionFactory().openSession(); 
     Transaction tx = null; 
     long count = 0; 
     try { 
      tx = session.beginTransaction(); 
      Criteria cr = session.createCriteria(Users.class);//Users.class is the mapping class for your database Objects. 
      cr.add(Restrictions.eq("userName", userName)); 
      cr.add(Restrictions.eq("userPassword", userPassword)); 
      count = (Long) cr.setProjection(Projections.rowCount()).uniqueResult(); 
      tx.commit(); 
     } catch (Exception asd) { 
      System.out.println(asd.getMessage()); 
      if (tx != null) { 
       tx.rollback(); 
      } 
     } finally { 
      session.close(); 
     } 
     return count > 0; 
    } 

所以,當你通過用戶名和密碼參數,如果用戶和密碼匹配,boolean將返回true否則將返回false。 在後臺引擎會產生這個查詢:

select count(*) from Users where user_name = ? and user_password = ? 

有一個很好的教程here在那裏你可以參考。

+0

感謝您的回覆。我已經使用了Criteria API,正因爲如此,有人告訴我,僅僅爲登錄頁面使用它是一種矯枉過正。 – aatif