Java Anwendungsentwicklung – Tag 10 von 10 (🔴 KOPFNUSS)
Von Franz-Martin, CTO bei Java Fleet Systems Consulting

Schwierigkeit: 🔴 KOPFNUSS (Optional/Anspruchsvoll)
Voraussetzungen: Tag 1-9 abgeschlossen


🗺️ Deine Position im Kurs

TagThemaNiveauStatus
1Die Desktop-Ära: Warum GUIs?🟢 Grundlagen✅ Abgeschlossen
2AWT & Swing Grundlagen🟢 Grundlagen✅ Abgeschlossen
3Layouts & Event-Handling🟢 Grundlagen✅ Abgeschlossen
4Komplexe Swing-Komponenten🟡 Fortgeschritten✅ Abgeschlossen
5JavaFX: Die „moderne“ Alternative🔴 KOPFNUSS✅ Abgeschlossen
6JDBC Grundlagen🟢 Grundlagen✅ Abgeschlossen
7JDBC Best Practices🟡 Fortgeschritten✅ Abgeschlossen
8JPA Einführung🟢 Grundlagen✅ Abgeschlossen
9JPA CRUD & Queries🟡 Fortgeschritten✅ Abgeschlossen
→ 10Integration & Ausblick🔴 KOPFNUSS👉 FINALE!

Legende: 🟢 Einsteiger-freundlich | 🟡 Erfordert Grundlagen | 🔴 Optional/Anspruchsvoll


⚡ Das Wichtigste in 30 Sekunden

Tag 10 = Der Abschluss!

Du bringst heute alles zusammen:

  • ✅ GUI (Tag 2-5) + Datenbank (Tag 6-9)
  • ✅ Saubere Schichtenarchitektur
  • ✅ Eine vollständige Desktop-Anwendung
  • ✅ Ausblick: Wie Spring Boot alles vereinfacht

🟢 Die Schichtenarchitektur

Integration

Abbildung 1: GUI → Service → Repository → Database


Die 4 Schichten

SchichtVerantwortungKlassen
Präsentation (UI)Anzeige, BenutzereingabenPersonenFrame, PersonDialog
ServiceGeschäftslogik, ValidierungPersonService
RepositoryDatenbankzugriffPersonRepository
DatenbankPersistenzH2/MySQL/PostgreSQL

Warum Schichten?

// ❌ SCHLECHT: UI greift direkt auf DB zu
public class PersonenFrame {
    public void speichern() {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        em.persist(person);  // UI kennt JPA-Details!
        em.getTransaction().commit();
    }
}

// ✅ GUT: UI kennt nur den Service
public class PersonenFrame {
    private final PersonService service;
    
    public void speichern() {
        service.save(person);  // Sauber!
    }
}

Vorteile:

  • Jede Schicht hat EINE Verantwortung
  • Änderungen bleiben lokal (DB wechseln = nur Repository ändern)
  • Testbar (Mock-Service für UI-Tests)

🟡 Die vollständige Anwendung

So sieht es aus:

┌──────────────────────────────────────────────────────────┐
│  👥 Personenverwaltung - Java Fleet Systems              │
├──────────────────────────────────────────────────────────┤
│  ➕ Neu  │  ✏️ Bearbeiten  │  🗑️ Löschen  │  🔄 Refresh  │
├──────────────────────────────────────────────────────────┤
│  ID   │  Name              │  Alter  │  E-Mail           │
├───────┼────────────────────┼─────────┼───────────────────┤
│  1    │  Max Mustermann    │  28     │  max@example.com  │
│  2    │  Lisa Schmidt      │  34     │  lisa@example.com │
│  3    │  Tom Müller        │  22     │  tom@example.com  │
├──────────────────────────────────────────────────────────┤
│  Suche: [________________]  [Suchen]  [Alle anzeigen]   │
└──────────────────────────────────────────────────────────┘

Der Code-Aufbau

src/main/java/de/javafleet/integration/
├── PersonenApp.java          ← Main-Klasse
├── entity/
│   └── Person.java           ← JPA Entity
├── repository/
│   └── PersonRepository.java ← Datenbankzugriff
├── service/
│   └── PersonService.java    ← Geschäftslogik
└── ui/
    ├── PersonenFrame.java    ← Hauptfenster
    ├── PersonTableModel.java ← TableModel
    └── PersonDialog.java     ← Bearbeiten-Dialog

🔴 AUSBLICK: Spring Boot

So sieht das HEUTE aus (Tag 6-9)

Abbildung 2: Manuell vs. Spring Boot – Der Unterschied


Mit Spring Boot wird alles einfacher!

persistence.xml (30+ Zeilen) wird zu:

# application.properties
spring.datasource.url=jdbc:h2:mem:db
spring.jpa.hibernate.ddl-auto=create

PersonRepository (50+ Zeilen) wird zu:

public interface PersonRepository 
    extends JpaRepository<Person, Long> {
    
    List<Person> findByNameContaining(String name);
}
// Das ist ALLES! Spring generiert die Implementation.

EntityManager-Handling wird zu:

@Service
public class PersonService {
    
    @Autowired
    private PersonRepository repository;
    
    @Transactional  // Automatische Transaction!
    public Person save(Person person) {
        return repository.save(person);
    }
}

🟡 Der Weg weiter

Abbildung 3: Dein Java-Lernweg


Empfohlene nächste Schritte

PrioritätThemaWarum?
🥇Spring BootDas was alle verwenden
🥇Spring Data JPARepository in 3 Zeilen
🥈REST APIsWeb-Services bauen
🥈JUnit + MockitoTesten lernen
🥉DockerAnwendungen deployen

Ressourcen


💬 Real Talk: Der letzte Tag

Java Fleet Büro, Freitag 17:00 Uhr.


Nova: „Franz-Martin… es ist geschafft?“

Franz-Martin: (lächelt) „10 Tage. Von ‚Was ist eine GUI?‘ bis zur vollständigen Anwendung.“

Nova: „Ehrlich? Am Anfang hab ich nicht geglaubt, dass ich das schaffe.“

Franz-Martin: „Das sagen alle. Und dann schaffen sie es doch.“

Nova: „Was jetzt? Ich meine… was kommt als nächstes?“

Franz-Martin: „Spring Boot. Das macht alles was du gelernt hast zehnmal einfacher.“

Nova: „Warum haben wir dann nicht gleich…?“

Franz-Martin: „Weil du jetzt VERSTEHST was Spring Boot im Hintergrund macht. Wenn etwas schiefgeht, kannst du debuggen. Du weißt was eine Transaction ist, was ein Repository macht, warum PreparedStatement wichtig ist.“

Nova: „Also war das alles Grundlagenarbeit?“

Franz-Martin: „Genau. Du hast jetzt das Fundament. Der Rest ist nur noch drauf bauen.“

Nova: „Danke, Franz-Martin.“

Franz-Martin: „Danke dir, Nova. Jetzt geh nach Hause. Montag sprechen wir über Spring Boot.“


✅ Checkpoint

📝 Quiz

Frage 1: Warum sollte die UI nicht direkt auf das Repository zugreifen?

A) Es ist verboten
B) Trennung der Verantwortlichkeiten (Single Responsibility)
C) Es ist langsamer
D) Es funktioniert nicht


Frage 2: Was macht der Service in einer Schichtenarchitektur?

A) Die Datenbank abfragen
B) Die GUI anzeigen
C) Geschäftslogik und Validierung
D) SQL generieren


Frage 3: Was generiert Spring Data JPA automatisch?

A) Die Entity
B) Die UI
C) Die Repository-Implementation
D) Die Datenbank


📝 Quiz-Lösungen

Frage 1:B – Trennung der Verantwortlichkeiten
Jede Schicht hat eine Aufgabe. Die UI zeigt an, der Service validiert, das Repository speichert.

Frage 2:C – Geschäftslogik und Validierung
Der Service enthält die „Regeln“ der Anwendung. Ist der Name gültig? Darf dieser User das?

Frage 3:C – Die Repository-Implementation
Du schreibst ein Interface, Spring generiert die komplette Implementation mit allen CRUD-Methoden.


📦 Downloads

ProjektInhaltDownload
java-anwendungsentwicklung-tag10.zipVollständige integrierte Anwendung⬇️ Download

Quick Start:

mvn exec:java   # Startet die Anwendung

🎉 KURS ABGESCHLOSSEN!

Was du in 10 Tagen gelernt hast:

GUI-Entwicklung (Tag 1-5):

  • ✅ AWT & Swing Grundlagen
  • ✅ Layouts & Event-Handling
  • ✅ JTable, JTree, JList
  • ✅ JavaFX Einblick

Datenbankzugriff (Tag 6-9):

  • ✅ JDBC & PreparedStatement
  • ✅ Connection Pooling & Transactions
  • ✅ JPA & Hibernate
  • ✅ JPQL & Relationships

Integration (Tag 10):

  • ✅ Schichtenarchitektur
  • ✅ Vollständige Desktop-Anwendung
  • ✅ Ausblick auf Spring Boot

Du bist bereit für:

  • Spring Boot & Spring Data JPA
  • Web-Entwicklung mit REST APIs
  • Professionelle Java-Projekte

🙏 Danke!

Danke dass du diesen Kurs gemacht hast!

Feedback? franz-martin@java-developer.online

Mehr Kurse? java-developer.online


© 2025 Java Fleet Systems Consulting | java-developer.online

Bis zum nächsten Kurs! 🚀

Autor

  • Franz-Martin

    65 Jahre alt, CTO und Gründer von Java Fleet Systems Consulting. Franz-Martin ist erfahrener Java-Entwickler, Tutor und Dozent, der das Unternehmen gegründet hat, um sein Wissen weiterzugeben und echte Java-Probleme zu lösen. Er moderiert Team-Diskussionen, mentoriert alle Crew-Mitglieder und sorgt dafür, dass technische Exzellenz mit Business-Realität kombiniert wird.