In diesem Beispiel wird die folgende einfache Definition einer Tabelle mit dem Namen HRDEPT.PROJ verwendet.
CREATE TABLE SAMPLE_SCHEMA.PROJ (PROJNO CHAR(6) PRIMARY KEY NOT NULL, PROJNAME VARCHAR(24), DEPTNO CHAR(3), RESPEMP CHAR(6), PRSTAFF DECIMAL(5, 2), PRSTDATE DATE, PRENDATE DATE, MAJPROJ CHAR(6))
Eine Bean, die dieser Tabelle entspricht, könnte wie folgt aussehen:
public class DeptProject { private String projectId; private String projectName; private String owningDepartment; private String owningEmployee; private BigDecimal avgStaffLevel; private Date startDate; private Date endDate; private String containingProject; @Column(name="PROJNO") public String getProjectId() { return this.projectId; } @Column(name="PROJNAME") public String getProjectName() { return this.projectName; } @Column(name="DEPTNO") public String getOwningDepartment() { return this.owningDepartment; } @Column(name="RESPEMP") public String getOwningEmployee() { return this.owningEmployee; } @Column(name="PRSTAFF") public BigDecimal getAvgStaffLevel() { return this.avgStaffLevel; } @Column(name="PRSTDATE") public Date getStartDate() { return this.startDate; } @Column(name="PRENDATE") public Date getEndDate() { return this.endDate; } @Column(name="MAJPROJ") public String getContainingProject() { return this.containingProject; } public void setProjectId(String pi) { this.projectId = pi; } public void setProjectName(String pn) { this.projectName = pn; } public void setOwningDepartment(String od) { this.owningDepartment = od; } public void setOwningEmployee(String oe) { this.owningEmployee = oe; } public void setAvgStaffLevel(BigDecimal asl) { this.avgStaffLevel = asl; } public void setStartDate(Date sd) { this.startDate = sd; } public void setEndDate(Date ed) { this.endDate = ed; } public void setContainingProject(String cp) { this.containingProject = cp; } }
Wenn eine Bean automatisch aus den Ergebnissen einer Abfrage erstellt werden soll, müssen Sie die Annotation @Column verwenden, wenn der Name einer Spalte in einem Datenbankobjekt nicht mit dem Namen der entsprechenden Eigenschaft in einer Bean übereinstimmt.
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.
Sie sollten eine Schnittstelle schreiben, die eine Routine enthält, mit der die Projekte zurückgemeldet werden, die am meisten Mitarbeiter erfordern.
public interface projectStaffing { @Select(sql="SELECT * FROM SAMPLE_SCHEMA.PROJ WHERE " + "(DAYS(PRENDATE) - DAYS(PRSTDATE)+1) * PRSTAFF = (" + " SELECT MAX((DAYS(PRENDATE) - DAYS(PRSTDATE)+1) * " + " PRSTAFF) FROM SAMPLE_SCHEMA.PROJ ) " + " ORDER BY PRENDATE ") public List<DeptProject> biggestProject(); }
Nachdem Sie eine Implementierung der Schnittstelle projectStaffing generiert und die Tabelle PROJ gefüllt haben, können Sie das größte Projekt (in Bezug auf die Mitarbeiterzahl) mit Code wie dem folgenden ermitteln:
Connection con = DriverManager.getConnection(...); projectStaffing pM = DataFactory.getData( projectStaffing.class, con ); List<DeptProject> deptList = pM.biggestProject(); for ( DeptProject dProj: deptList ) { System.out.println("Name: " + dProj.getProjectName() + " Department: " + dProj.getOwningDepartment() ); }
Wenn Sie wollen, dass die Anweisung SELECT zum Zurückmelden der Projekte, die die höchste Mitarbeiterzahl erfordern, 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 queryList() aufrufen, die in der Schnittstelle Data definiert ist.
Ihre Abfrage könnte wie folgt aussehen:
Connection con = DriverManager.getConnection(...); Data db = DataFactory.getData(con); List<DeptProject> deptList = db.queryList( "SELECT * FROM SAMPLE_SCHEMA.PROJ WHERE " + "(DAYS(PRENDATE) - DAYS(PRSTDATE)+1) * PRSTAFF = (" + " SELECT MAX((DAYS(PRENDATE) - DAYS(PRSTDATE)+1) * " + " PRSTAFF) FROM SAMPLE_SCHEMA.PROJ ) " + " ORDER BY PRENDATE", DeptProject.class ); for ( DeptProject dProj: deptList ) { System.out.println("Name: " + dProj.getProjectName() + " Department: " + dProj.getOwningDepartment() ); }