Der direkte Weg ist verlockend: Verbindung öffnen, SQL absetzen, Ergebnis auslesen — mitten in der Fachlogik. Er rächt sich an einer Stelle, an die man zuerst nicht denkt.
Eine Schnittstelle ohne Technikbegriffe
Ein Repository ist eine Schnittstelle über der Speicherung. Wer sie nutzt,
kennt weder SQL noch Verbindungen — sie spricht von Kursen, nicht von Tabellen.
Entscheidend ist dabei ein Detail, das man leicht übersieht: In der Signatur hat
SQLException nichts verloren. Sonst steht die Technik in der Abstraktion, und
jeder Aufrufer muss sie mitbehandeln.
Dazu gehört ein eigener Domänentyp. Der Datensatz aus einer fremden API ist an deren Format gebunden; das eigene Modell sollte es nicht sein.
Der eigentliche Gewinn sind die Tests
Die übliche Begründung lautet: Man kann die Datenbank austauschen. Das stimmt, passiert aber selten. Häufiger zahlt sich etwas anderes aus — die Fachlogik lässt sich prüfen, ohne dass eine Datenbank läuft. Für ein überschaubares Projekt genügen dafür zehn Zeilen: eine zweite Umsetzung der Schnittstelle, die ihre Daten in einer Liste hält. Eine Mock-Bibliothek braucht es dafür noch nicht.
Was hinter der Schnittstelle bleibt
Dort steckt dann die eigentliche Sorgfalt: PreparedStatement mit Platzhaltern
statt zusammengesetzter Zeichenketten, damit Eingaben die Struktur der Anfrage
nicht verändern können. try-with-resources, damit Verbindungen auch im
Fehlerfall schließen. Und eine eigene Ausnahme, die den technischen Fehler
übersetzt, statt ihn nach außen durchzureichen.
Mehr dazu im Seminar
Wie das Schritt für Schritt entsteht — vom Zuschnitt in Maven-Module über H2 und JDBC bis zum Test ohne Datenbank — zeigt das Modul Datenbankzugriff.