2008-09-23 12 views
7

Im Moment mache ich eine extrem einfache Website - etwa 5 Seiten. Die Frage ist, ob es Overkill ist und die Zeit wert ist, irgendeine Art von Datenbank-Mapping-Lösung zu integrieren, oder ob es besser wäre, einfach nur alten JNDI zu verwenden. Ich werde vielleicht ein Dutzend Dinge haben, die ich aus der Datenbank lesen/schreiben muss. Ich denke, ich habe ein grundlegendes Verständnis dieser Technologien, aber es würde immer noch viel auf die Dokumentation Bezug nehmen. Hat noch jemand die Entscheidung getroffen?Wann ist Hibernate/JPA/Toplink zu verwenden?

EDIT: Sorry, ich hätte JNDI angegeben, um die DB-Verbindung und JDBC nach den Operationen zu suchen.

Antwort

17

Kurze Antwort: Es hängt von der Komplexität ab, die Sie unterstützen möchten.

Lange Antwort:

Zu allererst ORM (Object Relational Mapping - Mapping-Datenbank wie Sie es nennen -) und JNDI (Java Naming and Directory Interface) sind zwei verschiedene Dinge.

Die erste, wie Sie bereits wissen, wird verwendet, um die Datenbanktabellen Klassen und Objekten zuzuordnen. Die zweite besteht darin, einen Nachschlage-Mechanismus für Ressourcen bereitzustellen, beispielsweise DataSources, Ejb, Queues oder andere.

Vielleicht Ihre mittlere "JDBC".

Nun zu Ihrer Frage: Wenn es so einfach ist, wäre es nicht notwendig, ein ORM zu implementieren. Die Zahlentabellen wären höchstens 5 - 10, und die Operationen sind wirklich einfach, denke ich.

Wahrscheinlich würde einfaches JDBC ausreichen.

Wenn Sie das DAO-Muster verwenden, können Sie es später ändern, um die ORM-Strategie bei Bedarf zu unterstützen.

So: Sagen Sie bitte die Employee-Tabelle haben

Sie die Employee.java erstellen mit allen Feldern der DB mit der Hand (es sollte nicht zu lange dauern) und einem EmployeeDaO.java mit Methoden wie:

+findById(id): Employee 
+insert(Employee) 
+update(Employee) 
+delete(Employee) 
+findAll():List<Employee> 

und die Umsetzung ist ganz einfach:

select * from employee where id = ? 
insert into employee (bla, bla, bla) values (? , ? , ?) 
update etc. etc 

Wann (und ob) Ihre Anwendung zu komplex wird Sie m Ändern Sie die DAO-Implementierung. Zum Beispiel ändern Sie in der "Select" -Methode den Code, um das ORM-Objekt zu verwenden, das die Operation ausführt.

public Employee selectById(int id) { 
     // Commenting out the previous implementation... 
     // String query = select * from employee where id = ? 
     // execute(query) 

     // Using the ORM solution 

     Session session = getSession(); 
     Employee e = (Employee) session.get(Employee.clas, id); 
     return e; 
} 

Dies ist nur ein Beispiel, im wirklichen Leben können Sie die abstact Fabrik lassen Sie die ORM DAO erstellen, aber das ist offtopic.Der Punkt ist, dass Sie einfach anfangen können und indem Sie die Design-Muster verwenden, können Sie die Implementierung später bei Bedarf ändern.

Natürlich, wenn Sie die Technologie lernen möchten, können Sie auch mit 1 Tabelle beginnen.

Die Wahl des einen oder anderen (ORM-Lösung) hängt im Wesentlichen von der Technologie ab, die Sie verwenden. Zum Beispiel für JBoss oder andere Open Source-Produkte ist Hibernate großartig. Es ist Open Source, es gibt eine Menge Ressourcen, von denen man lernen kann. Aber wenn Sie etwas verwenden, das bereits über Toplink verfügt (wie der Oracle Application Server) oder wenn die Basis bereits auf Toplink aufgebaut ist, sollten Sie bei diesem Framework bleiben.

Übrigens, da Oracle BEA gekauft hat, sagten sie, dass sie Kodo (weblogic pereessence framework) durch toplink im jetzt "Oracle Weblogic Application Server" ersetzen.

ich Ihnen einige Ressourcen verlassen, wo Sie weitere Informationen über diese bekommen:


In dieser „Patterns of Enterprise Application Architecture“ Buch, Martin Fowler, erklärt, wo das eine oder andere zu verwenden, hier ist der Katalog . Schauen Sie sich auf Datenquelle Architectural Patterns vs. Object-Relational Verhaltensmuster:

PEAA Catalog


DAO (Data Access Object) Teil des Kern J2EE Muster Katalog ist:

The DAO pattern


Dies ist ein Starter-Tutorial für Hibernate:

Hibernate


Die offizielle Seite von Toplink: Ich "denken", die gute Meinung von JPA

Toplink


Schließlich ist, dass Sie Anbieter in letzter Zeit geändert.

Starten Sie einfach und dann entwickeln.

Ich hoffe, das hilft.

1

Es scheint, als wäre es für eine sehr einfache Anwendung übertrieben, vor allem, wenn Sie nicht planen, es jemals zu erweitern. Es scheint jedoch auch, dass es sich lohnen könnte, diese mit dieser einfachen Anwendung zu verwenden, damit Sie besser verstehen, wie sie arbeiten, wenn Sie das nächste Mal etwas haben, das sie verwenden könnte.

1

Meinen Sie einfach JDBC? Ein kleines Projekt könnte eine gute Gelegenheit sein, eines der ORM-Frameworks zu übernehmen, besonders wenn Sie Zeit haben.

Ohne weitere Informationen ist es schwierig, auf die eine oder andere Weise eine Empfehlung zu geben.

1

Meine Faustregel ist, wenn es schreibgeschützt ist, bin ich bereit, es in JDBC zu tun, obwohl ich lieber ein leeres Hibernate-Projekt mit SQLQuery verwenden, um die Typzuordnung von Hibernate zu nutzen. Sobald ich schreiben muss, gehe ich mit Hibernate, weil es so viel einfacher ist, einige Attribute zu setzen und dann den Speicher aufzurufen, als jede Spalte einzeln zu setzen. Und wenn Sie mit der Optimierung beginnen müssen, um Updates für unveränderte Objekte zu vermeiden, sind Sie mit einem OR/M und dessen dreckiger Prüfung viel besser dran. Der Umgang mit Fremdschlüsselbeziehungen ist ein weiteres Zeichen dafür, dass Sie es einmal zuordnen und dann die Getter verwenden müssen. Die gleiche Logik würde für Toplink gelten, obwohl Hibernate viel besser für diese Art des Übergangs von reinem SQL wäre, wenn sie in den 3 Jahren, seit ich sie verwende, etwas wie HQL hinzugefügt haben. Denken Sie daran, dass Sie nicht jedes Objekt/jede Tabelle abbilden müssen, nur diejenigen, bei denen es einen klaren Vorteil gibt. Meiner Erfahrung nach bauen die meisten Projekte, die kein bestehendes OR/M verwenden, ein neues auf, was eine schlechte Idee ist.

1

Die beste Art zu lernen, ORM ist auf ein kleines Projekt. Beginne mit diesem Projekt.

Sobald Sie den Dreh raus haben, verwenden Sie ORM für alles.

Es gibt nichts zu klein für ORM. Nach den ersten paar Projekten werden Sie feststellen, dass Sie nicht anders arbeiten können. Das ORM-Mapping ist in der Regel sinnvoller als fast jede andere Art zu arbeiten.