2016-04-09 15 views
-1

Ich bin ein Neuling im Winterschlaf und fing an, daran zu arbeiten. Ich versuche, Hibernate für eines meiner Projekte zu verwenden, das eine einfache Anmeldeseite enthält. Jemand (Senior) sagte mir, warum Hibernate für solch eine einfache Abfrage verwenden soll, wird es ein Leistungsproblem haben, und ich sollte einfache JDBC für diese Seite verwenden.Hibernate für einfache Abfrage

Kann mir jemand sagen, welche Art von Abfragen ich im Winterschlaf verwenden kann?

Dank

+0

Sie könnten dies lesen: http://StackOverflow.com/Questions/1607819/weaknesses-of-Hibernate?rq=1 –

+0

Ich nicht was falsch in der Frage war, dass jemand nur abgestimmt es. Vielleicht kann ein Gentleman, der es abgelehnt hat, das erklären? – aatif

+1

@JoseLuis Danke für die Antwort, ich habe diese Antwort bereits gelesen .. Ich war verwirrt, dass es wirklich eine gute Idee ist, JDBC für einige Seiten in meiner Anwendung zu verwenden. – aatif

Antwort

0

Die Frage der Leistung ist überall und nicht eindeutig so zu überwintern es hängt alles davon ab, wie Sie denn selbst in JDBC Ihre Projektstruktur zum Beispiel dort mit PreparedStatement anstelle von Statement ein starkes Argument ist. In Hibernate können Sie HSQL verwenden oder für die kühlere Criteria API entscheiden. Ich bevorzuge eigentlich die Criteria API, weil ich keine Abfrage schreiben muss, überlasse ich das der Hibernate-Engine.

Also vorausgesetzt, Sie haben eine Tabelle mit dem Namen Users in Ihrer Datenbank und es enthält den Benutzernamen und das Passwort für die Anmeldung bei Benutzern, eine einfache boolean Methode wie diese wird Ihnen sehr gut dienen und wie Sie bemerken können, müssen Sie nicht schreiben jede Abfrage. Dies macht Ihre Anwendung tatsächlich unabhängiger in Bezug auf Datenbanken, da sie mit den meisten Datenbanken mit minimalen Änderungen funktioniert.

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; 
    } 

Also, wenn Sie passieren Benutzernamen und Passwort-Parameter, wenn ein Benutzer und Passwort übereinstimmt, wird die booleantrue zurückkehren sonst wird es false zurück. Im Hintergrund wird der Motor diese Abfrage generiert:

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

Es gibt ein nettes Tutorial ist here wo Sie verweisen können.

+0

Danke für die Antwort. Ich habe die Kriterien-API bereits verwendet und deshalb hat mir jemand gesagt, dass es ein Overkill ist, es nur für die Anmeldeseite zu verwenden. – aatif