In diesem Beispiel wird die folgende einfache Definition einer Tabelle mit dem Namen SALES.CUSTOMER verwendet.
CREATE TABLE SALES.CUSTOMER ( CUSTID BIGINT NOT NULL, NAME VARCHAR(24), ADDRESSL1 VARCHAR(50), CITY VARCHAR(24), REGION BIGINT, PRIMARY KEY(CUSTID))
Eine einfache Bean, die dieser Tabelle entspricht, könnte wie folgt aussehen:
public Customer { public Integer custId; public String name; public String addressL1; public String city; public Integer region; }
Wenn Sie mit Annotationen versehene Methoden zum Manipulieren eines Datenbankobjekts verwenden, müssen Sie eine Schnittstelle definieren, die diese Methoden definiert. Verwenden Sie das pureQuery-Dienstprogramm Generator, um eine Implementierung dieser Schnittstelle zu generieren und schreiben Sie anschließend eine Anwendung, die die in der Implementierungsklasse enthaltenen Methoden aufruft.
Damit eine Abfrage einen Iterator mit Customer-Objekten für Kunden in einer bestimmten Verkaufsregion füllt, könnten Sie eine Schnittstelle wie die folgende definieren:
import com.company.Customer; public interface CustomerQuery { @Select(sql= "SELECT * FROM Customer WHERE region=?1") Iterator<Customer> getCustomersInRegion(int r); }
Die Schnittstelle definiert die Methode getCustomersInRegion(), die einen Iterator von com.company.Customer-Objekten zurückgibt, basierend auf einem einzelnen Parameter int, der die Region angibt, in der sich die Kunden befinden.
Die Annotation @Select gibt die SQL-Abfrage an, durch die der zurückgegebene Iterator der Funktion gefüllt wird, basierend auf der Gleichheit zwischen der Regionsspalte der Tabelle CUSTOMER und dem ersten Eingabeparameter der Funktion, der mit ?1 gekennzeichnet ist.
Nach Definition der Schnittstelle können Sie das pureQuery-Dienstprogramm Generator ausführen, um eine Implementierung dieser Schnittstelle zu generieren. Der Name der Implementierung ist CustomerQueryImpl. Das Paket für die Implementierung ist das Paket, das die Schnittstelle CustomerQuery enthält.
Nach Generieren einer Implementierung der Schnittstelle CustomerQuery können Sie sie in einer Anwendung wie der folgenden verwenden:
Connection con = DriverManager.getConnection(...); 1 CustomerQuery cqcQuery = DataFactory.getData( CustomerQuery.class, con ); 2 Customer c; int r = 123; Iterator<Customer> customers = 3 cqcQuery.getCustomersInRegion(r); while (customers.hasNext()){ 4 c = customers.next(); System.out.println(c.custId+" "+c.name); } ((ResultIterator) customers).close(); 5
Der Code führt die folgenden Schritte aus:
Wenn Sie wollen, dass die Anweisung SELECT im Quellcode der Anwendung sichtbar ist, können Sie den integrierten Programmierstil verwenden.
Dazu würden Sie in der Anwendung eine Version der überladenen Methode queryIterator() aufrufen, die in einer Implementierung der Schnittstelle Data definiert ist.
Ihre Abfrage könnte wie folgt aussehen:
Connection con = DriverManager.getConnection(...); 1 Data db = DataFactory.getData(con); 2 Customer c; int region = 123; Iterator<Customer> customers = db.queryIterator( 3 "SELECT custId, name FROM Customer WHERE region=?1", Customer.class, region); while (customers.hasNext()){ 4 c = customers.next(); System.out.println(c.custId+" "+c.name); } ((ResultIterator) customers).close(); 5
Der Code führt die folgenden Schritte aus: