2016-04-09 10 views
-1

私は休止状態の初心者であり、作業を開始しました。私は単純なログインページを含む私のプロジェクトの一つのためにハイバネートを使用しようとしています。 誰か(シニア)が、単純なクエリにhibernateを使用する理由を教えてくれました。パフォーマンス上の問題があり、そのページには単純なJDBCを使うべきです。単純なクエリのためのHibernate

誰でも私が休止状態で使用できるクエリのタイプについてアドバイスできますか?

おかげ

+0

あなたはこれを読むことができます:http://stackoverflow.com/questions/1607819/weaknesses-of-hibernate?rq=1 –

+0

誰かがちょうどそれを投票したという質問に間違っていませんでした。多分それを下落させた紳士が説明できるのだろうか? – aatif

+1

@JoseLuis回答をお寄せいただきありがとうございます。私はすでにその答えを読んでいます。アプリケーションの一部のページでJDBCを使用するのは本当に良いことです。 – aatif

答えて

0

パフォーマンスの問題は、それがすべてでも、JDBC、例えばStatementの代わりにPreparedStatementを使用しての強力な引数がありますので、あなたのプロジェクトを構築する方法に依存してどこにでもなく休止状態に固有のものです。 Hibernateでは、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は、それ以外の場合はfalseを返しますtrueを返します。 背景にエンジンがこのクエリを生成します。

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

あなたが参照できる素敵なチュートリアルhereがあります。

+0

返事をありがとう。私はCriteria APIをすでに使用しています。そのため、ログインページ用に使うのは残念です。 – aatif

関連する問題