JDBC , JDO oder JPA

cipherwar

Mitglied
Hallo,

ich will eine Anwendung schreiben, die einige Daten aus einer DB holt und dann in einer Jtable darstellen soll.

Das ganze ist relativ klein und übersichtlich, eine 1-user-Anwendung.

Würdet ihr für sowas in der Anwendung JPA oder JDO einsetzen oder lediglich ein bischen JDBC in der GUI einbauen?

Ich bin mir nicht sicher, ob ich mit JPA nicht massiv overhead einbaue ...
 

cipherwar

Mitglied
Danke. Dennoch Modelklassen einführen oder direkt in den Gui-Klassen?

(Es soll so eine Art todo-Liste sein, die dann in einer jtable dargestellt werden.)
 

ARadauer

Top Contributor
Ich würd immer Model Klassen machen. Da kannst du dir dann auch ein sauberes Table Model schreiben das von AbstractTable Model erbt...
 

cipherwar

Mitglied
myBatis sieht interessant aus, allerdings auch recht unbekannt. Da stellt sich die Frage, ob sowas auch in 2 Jahren noch weiterentwickelt wird....

Gibt es ähnliches auch von Apache oder so?

Ansonsten werde ich es mir mal ansehen.
 
Zuletzt bearbeitet:
M

maki

Gast
iBatis bzw. jetzt myBatis gibt es seit über 10 jahren und es wird auch in den nächsten jahren nicht verschwinden... nebenbei, myBatis ist 2010 von Apache wieder "weggezogen" ;)
 
M

maki

Gast
Gegenfrage: Was kannst du denn bereits?

JDBC?
myBatis?
Hibernate/JPA?

Wenn du 3 mal "nein" antwortest, wäre zu Übungszwecken JDBC nicht so verkehrt.
 

cipherwar

Mitglied
JDBC.
Ich frage mich nur, ob es wirklich so gut ist (wie bislang), in meiner Gui-Klasse die JDBC-Statements "reinzubasteln" .. Das ist ja dann in keinster Weise mehr MVC.

Also dachte ich, es wäre sinnvoll Modellklassen zu haben, die das machen und die dann mit der Jtable in meiner Gui-Klasse zu verbinden. Und so kommt dann die Frage auf, ob meine Modellklassen dann nicht sowas wie JPA oder myBatis verwenden sollten.
 
Zuletzt bearbeitet:

cipherwar

Mitglied
Also vielleicht mal ganz konkret:
Ich habe eine SqLite-DB mit den Datenbanken
SQL:
CREATE TABLE [options] (
[userName] VARCHAR(100)  NOT NULL,
[userId] INTEGER  NOT NULL PRIMARY KEY,
[userLicence] VARCHAR(100)  NULL,
[userEmail] VARCHAR(100)  NULL,
[programEditor] VARCHAR(250)  NULL,
[programEmailer] VARCHAR(250)  NULL,
[programBackupDir] VARCHAR(250)  NULL,
[pserAmazonPid] VARCHAR(100)  NULL
)

und
SQL:
CREATE TABLE [users] (
[id] int  NOT NULL,
[loginname] varchar (45)  NULL,
[prename] varchar (45)  NULL,
[surname] varchar (45)  NULL,
[email] varchar (45)  NULL,
[password] varchar (45)  NULL,
[registered] TIMESTAMP  NULL,
[lastlogin] TIMESTAMP  NULL,
[activated] BOOLEAN  NULL,
[created] TIMESTAMP  NULL,
[modified] TIMESTAMP  NULL
)

und
SQL:
CREATE TABLE [searches] (
[id] int  NOT NULL PRIMARY KEY,
[user_id] int  NOT NULL,
[phrase] varchar ( 100 )  NOT NULL,
[responses] TEXT  NULL,
[lastactive] TIMESTAMP DEFAULT 'NULL' NULL,
[active] int DEFAULT 'NULL' NULL,
[runcount] int DEFAULT 'NULL' NULL,
[vendor_id] int  NOT NULL,
[created] TIMESTAMP DEFAULT 'NULL' NULL,
[modified] TIMESTAMP DEFAULT 'NULL' NULL
)
Die Options möchte ich beim Start der Anwendung einlesen. Fertig. Dafür würde ich nur JDBC nehmen, eigene Klassen sind m.E. schon Oversized.

Die Users : Hier brauche ich CRUD.
Die Searches: Hier ebenfalls CRUD.

Ich denke, ich muss Entity-Classes für User + Searches machen (Model) und die dann zur Darstellung in der Jtable (View) verwenden. Der Weg dazu ist mir allerdings nicht klar - die letzte DB-Entwicklung habe ich ca. 2005 gemacht, und seitdem hat sich ja einiges getan (s.o.).

Also: nun mit Entity-Klassen + myBatis + TableModel und dann Jtable?
 

turtle

Top Contributor
Entity-Klassen + myBatis + TableModel und dann Jtable?
Ja.

Bei myBATIS sind Entity-Klassen normale POJO's und fungieren bei mir immer als DTO's.

Also bei Deinem Beispiel:
Java:
public class Users {
	int id;
	String loginname;
	String prename;
	String surname;
	String email;
	String password;
	Timestamp registered;
	Timestamp lastlogin;
	boolean activated;
	Timestamp created;
	Timestamp modified;
        // getter und setter für die Attribute
}
Dann würde ich eine DAO-Klasse schreiben, die mir die CRUD-Operationen anbietet und diese auf entsprechende SQL-Kommandos von myBATIS laufen lassen.

Für die GUI würde ich, wie bereits angemerkt, ein TableModel schreiben, dass die Entity-Klassen verwendet.
 

cipherwar

Mitglied
Danke für das Beispiel, das hilft mir schon mal weiter.

Nochmal eine kurze Nachfrage:
dann würde ich eine DAO-Klasse schreiben, die mir die CRUD-Operationen anbietet

Ich verstehe das so, dass diese EINE DAO-Klasse dann die Entity-Klassen einsetzt. Damit ist diese DAO-Klasse dann also eine Art Controller-Klasse, ja?


In dem oben genannten Beispiel für MyBatis fehlt diese DAO Klasse aber: http://www.java-forum.org/blogs/turtle/162-mybatis.html

Die MyBatis-Doku gibt auch nichts dergleichen her: MyBatis 3 | Getting started

Sowas ist soweit ich das sehe aber hier beschrieben: The IdleWorx Blog: mybatis.

Ist das in der Art, wie Du mir empfiehlst?
 

turtle

Top Contributor
Ja, genau, eine DAO-Klasse kann als Controller für die Persistenz verstanden werden und kapselt die Persistenz-Einzelheiten weg von der Applikation, die sich darum nicht kümmern muss.

Die DAO-Klassen sind seit einiger Zeit nicht mehr Bestandteil von myBATIS, unter anderem deshalb, weil diese leicht selbst geschrieben werden können. Im Prinzip ist Dein Link ein guter Anfang. Ich würde "nur" darauf achten, dass ich wirklich ein Business-Interface definieren würde, um dann spezifisch darauf eine myBATIS-Implementierung zu entwickeln. Dabei wäre mir wichtig meinen Applikationscode frei von SQL-spezifischen (oder myBATIS) Exceptions zu halten, weil dies Dein Restcode abhängig von der Persistenzschicht macht.

Und wenn Du wirklich Deinen Applikationscode gegen das DAO-Interface entwickelst, kannst Du später die Implementierung tauschen gegen eine, die Dir vielleicht besser gefällt (JPA oder Hibernate), obwohl ich mir das bei myBATIS nicht vorstellen kann ;)
 

cipherwar

Mitglied
Gut, werde ich drauf achten. Inzwischen habe ich schon die Konfiguration von MyBatis hinbekommen - war zwar einiges ziemlich mies dokumentiert, aber immerhin läufts nach knapp 2 Stunden.

Vielen Dank!
 

cipherwar

Mitglied
ich muss doch nochmal nachfragen...

eine DAO Klasse? Oder eine pro Entity-Klasse?

Ich habe mir auch mal den DAO Generator unter
DaoGen - Data Access Object Code Generator
angesehen. :rtfm: Der würde je Entity-Klasse eine Dao-Klasse erzeugen.

Wenn ich MyBatis richtig verstanden habe, müsste ich dann die MyBatis-Funktionalität in diesen DAO packen, ja?
 

turtle

Top Contributor
Ich würde je Entity-Klasse eine Dao-Klasse schreiben.

Weil aber die Funktionalität, die in einem DAO gepackt werden soll, sehr vom Programm, Anforderungen, Datenbank, Tabellen-Struktur abhängig ist, gibt es hier keine Empfehlung, die immer passt. Oft sind im DAO CRUD-Funktionen drin. Insbesondere mehrere komplexe SELECT-Anfragen werden oft in mehrere Interface-Methoden rausgereicht und nicht nur eine Read-Methode. Bei einem sauberen Design kann man aber ziemlich einfach anfangen und bei Bedarf erweitern.

MyBatis-Funktionalität in diesen DAO packen
Genau.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B SQLite + jdbc + IntelliJ-Consumer = "No suitable driver found..." Datenbankprogrammierung 15
J PC-Start Problem JDBC Connection Datenbankprogrammierung 10
N JDBC SQLITE und Cascading Datenbankprogrammierung 2
D Asynchrone Aufrufe mit jdbc Datenbankprogrammierung 5
Edin JDBC Hilfe Datenbankprogrammierung 2
H JDBC Tabellen ausgeben Datenbankprogrammierung 8
Husamoli345 JSF-JDBC Verbindung Crud Datenbankprogrammierung 15
G MySQL JDBC Metadaten auslesen aus .accdb -> Primärschlüssel manchmal erkannt manchmal nicht Datenbankprogrammierung 3
N Java, sql, jar, JDBC-Treiber in Classpath Datenbankprogrammierung 8
O Create Table per JDBC Fehler: ORA-00922 Datenbankprogrammierung 4
J JDBC anschaulich präsentieren Datenbankprogrammierung 2
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
ralfb1105 Oracle JDBC Debugging Datenbankprogrammierung 8
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
Thallius MySQL jdbc schließt Verbindung nach vielen Request von selber Datenbankprogrammierung 8
B MySQL JDBC Kommentarfilter Datenbankprogrammierung 4
Aruetiise MySQL Name JDBC Drive finden Datenbankprogrammierung 4
E Sqlite-jdbc Mitliefern Datenbankprogrammierung 4
R jdbc-Zugriff Nicht erlaubt ? Datenbankprogrammierung 16
S probleme mit dem jdbc treiber Datenbankprogrammierung 1
Thallius MySQL Merkwürdiges JDBC Verhalten bei VPN Verbindung. Datenbankprogrammierung 7
O JDBC Daten in zwei Tabellen mit zwei foreach-Schleifen einfügen (insert into) Datenbankprogrammierung 1
F MySQL JDBC Problem Datenbankprogrammierung 5
C JDBC und SQLite Datenbank Datenbankprogrammierung 8
looparda SQLite Active JDBC Abstraktion Datenbankprogrammierung 2
J JDBC SQL Statement mit Parameter Datenbankprogrammierung 7
S JDBC PreparedStatement durchiterieren Datenbankprogrammierung 6
J RESTServie + JDBC + No suitable driver found for jdbc Datenbankprogrammierung 4
KaffeeFan JDBC/ODBC-Bridge entfernt Datenbankprogrammierung 4
S sun.jdbc.odbc.JdbcOdbcDriver wird nicht gefunden Datenbankprogrammierung 2
J Fehlende DatenbankView nach einbeziehen von JDBC Datenbankprogrammierung 3
A Mit JDBC auf postgreSQL Datenbank zugreifen Datenbankprogrammierung 5
C PostgreSQL JDBC + PostgreSQL: getLong liefert 0 statt NULL Datenbankprogrammierung 2
flenst111 SQL-Statement Wie konfiguriert man JDBC-Connect.richtig, damit es bei riesigen Tabs keinen Speicherüberlauf gibt? Datenbankprogrammierung 1
M JDBC Tabellen mit Boolean Spalten können nicht erstellt werden. DB Updaten - wie? Datenbankprogrammierung 6
S JDBC mit Postgres DB connecten Datenbankprogrammierung 3
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
D JDBC - Verständnisfrage Datenbankprogrammierung 2
C Tabelle erstellen mit Apache JDBC-Util Datenbankprogrammierung 1
L Conversion-Error bei JDBC Date Literals Datenbankprogrammierung 3
X MySQL DB-verbindung ohne JDBC/ODBC Datenbankprogrammierung 1
F sun.jdbc.odbc.jdbcodbcdriver wird nicht gefuden Datenbankprogrammierung 3
J Keine Verbindung zu MSSQL DB mit JDBC Datenbankprogrammierung 3
U JDBC prepaird Statements Datenbankprogrammierung 4
B MySQL JDBC Zugriff auf entfernt Datenbank, fehlende Rechte Datenbankprogrammierung 2
Q MySQL JDBC-Treiber Problem Datenbankprogrammierung 2
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
N MySQL com.microsoft.sqlserver.jdbc.SQLServerException: Die Verbindung wurde geschlossen. Datenbankprogrammierung 1
N JDBC: rollback() bei Exception geht nicht!? Datenbankprogrammierung 1
C Dateipfad des jdbc Treibers Datenbankprogrammierung 2
G JDBC Connect nur über SID fehlerfrei möglich Datenbankprogrammierung 2
R Oracle jdbc Zugriff auf Oracle Datenbankprogrammierung 2
T JDBC Fehler Datenbankprogrammierung 2
J JDBC via Singleton Datenbankprogrammierung 12
Z PostgreSQL JDBC mit Postgresql Datenbankprogrammierung 2
B No suitable driver found for jdbc:oracle:thin:@$HOST:$PORT:$SID Datenbankprogrammierung 7
K JDBC via Netzwerk Datenbankprogrammierung 4
B JDBC Connection Fehler Datenbankprogrammierung 8
K JDBC- In Java "stored procedure" erstellen für DB2,OracleSql ... Datenbankprogrammierung 3
J JDBC in Library|"Treiber konnte nicht geladen werden"" Datenbankprogrammierung 2
B JDBC-Connection: Data source name too long Datenbankprogrammierung 3
D JDBC insert mit select abfrage Datenbankprogrammierung 5
A JDBC Prepared Statement Autoincrement Datenbankprogrammierung 3
H JDBC prüfen ob Table existiert Datenbankprogrammierung 3
crashfinger jdbc-connection mit jre7 funktioniert nicht Datenbankprogrammierung 5
0 JDBC Oracle Verbindungsaufbau Datenbankprogrammierung 6
Q Oracle Linux: ClassNotFoundException: oracle.jdbc.driver.OracleDriver Datenbankprogrammierung 6
B JDBC MySQL Statement Datenbankprogrammierung 3
F Oracle Oracle JDBC Anbindung unter Glassfish 3.1.2 Datenbankprogrammierung 3
V PostgreSQL JDBC Treiber fehlt Datenbankprogrammierung 6
Y JDBC - Datenbankabfrage Webserver Datenbankprogrammierung 4
C JDBC Datenbank funktioniert nicht Datenbankprogrammierung 7
J MySQL Datenbank konfigurieren, JDBC, MySQL oder Hibernate Datenbankprogrammierung 2
P JDBC Verbindung zur DB klappt nicht Datenbankprogrammierung 6
J Java - JDBC Verbindung zur Datenbank nicht möglich Datenbankprogrammierung 10
K JDBC Buch kaufen? Datenbankprogrammierung 3
K Hibernate vs. JDBC Datenbankprogrammierung 4
K JDBC Driver not found Datenbankprogrammierung 10
GianaSisters Per JDBC auf Microsoft SQL 2005 Datenbankprogrammierung 24
S ich brauche tipps für JDBC Datenbankprogrammierung 4
Paristick MSSQL - JDBC Exception beim Registrieren Datenbankprogrammierung 5
S Applet stucks at SQL Connection (jTDS JDBC) Datenbankprogrammierung 15
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
c_sidi90 JDBC Oracle Connection schlägt fehl Datenbankprogrammierung 2
J jdbc-dataSource in Klassen nutzen Datenbankprogrammierung 2
H Rechnen in Datenbanken - JDBC Mittel der Wahl? Datenbankprogrammierung 32
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
D JDBC Fehler beim laden der nativen Bibliothek db2jcct2 Datenbankprogrammierung 9
J MySQL Verbindung über JDBC scheitert immer Datenbankprogrammierung 2
I Master/Detail Tabellen mit JDBC und Swing Datenbankprogrammierung 10
S MSSQL JDBC "Driver class not found" Datenbankprogrammierung 9
E Datenbankverbindung mit Oracle JDBC und Eclipse Plugin Quantum db Datenbankprogrammierung 2
ruutaiokwu jdbc connection als singleton Datenbankprogrammierung 11
J MySQL Löschen von Rows mit JDBC Datenbankprogrammierung 9
G JDBC Exception Datenbankprogrammierung 3
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
F Fehlerhandling bei JDBC Datenbankprogrammierung 9
T JDBC und Arrays Datenbankprogrammierung 7
X Oracle JDBC und Joins? Datenbankprogrammierung 7
A No suitable driver found for jdbc:microsoft:sqlserver... Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben