In Java-Enterprise-Anwendungen ist es sinnvoll, Zugriffe auf die Datenbank nach dem Design-Pattern Data Access Object in DAO-Klassen zu kapseln. Die Basis-CRUD-Operationen lassen sich in einer generischen Klasse unabhängig vom Entity-Typ definieren. Aufwand entsteht durch die Implementierung von Find-Methoden, um Daten nach angegebenen Kriterien zu selektieren. Dieser Aufwand lässt sich durch die Verwendung des Design-Patterns Find-By-Example reduzieren.
Bei Find-By-Example werden Suchbegriffe in einem Example-Objekt angegeben. So kann nach einer beliebigen Kombination von Attributen gesucht werden. Auch wenn Hibernate oder EclipseLink Implementierungen eines Find-By-Example mitbringen verwenden wir in unseren Projekte eine Eigenimplementierung auf Basis von JPA.
In unserem Find-By-Example ist die Example-Klasse ein einfaches Pojo. Es enthält die Attribute, nach denen gesucht werden soll. Wesentlich dabei ist die Übereinstimmung der Attributnamen zwischen Example- und Entity-Klasse. Folgende Möglichkeiten bietet unserer Find-By-Example-Implementierung.
- Bei Zeichenketten kann mit '%' ein Muster angegeben werden. Beispiel: mit 'Ko%' wird nach Zeichenketten gesucht, die mit 'Ko' anfangen.
- Bei Zahlen oder Datumsangaben lassen sich Relationen mit <, > <=, >= angeben. Beispiel: '>01.01.1970' sucht nach Datumsangaben, die nach dem 01.01.1970 liegen.
- Bei Zahlen oder Datumsangaben lässt sich auch ein Intervall angeben. Beispiel '01.04.12016-31.12.2016' sucht nach Datumsangaben in dem angegebenen Intervall.
- Einfache Assoziationen werden bei der Suche berücksichtigt.
Die Implementierung haben wir hier in Form eines Maven-Projekts zum Download bereitgestellt.