이 예제에서는 다음과 같은 HRDEPT.PROJ 테이블의 단순 정의를 사용합니다.
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))
이 테이블에 해당하는 Bean은 다음과 같을 수 있습니다.
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; } }
Bean이 쿼리 결과에서 자동으로 빌드될 경우, 데이터베이스 오브젝트의 컬럼 이름이 Bean의 해당 등록 정보 이름과 일치하지 않을 때 @Column 어노테이션을 사용해야 합니다.
어노테이션이 있는 메소드를 사용하여 데이터베이스 오브젝트를 조작하는 경우, 해당 메소드를 정의하는 인터페이스를 정의하고 pureQuery Generator를 사용하여 해당 인터페이스의 구현을 생성한 다음 구현 클래스에 있는 메소드를 호출하는 응용프로그램을 작성해야 합니다.
예를 들어, 최대 인력이 필요한 프로젝트를 보고하는 루틴이 포함된 인터페이스는 다음과 같이 작성할 수 있습니다.
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(); }
projectStaffing 인터페이스의 구현을 생성하고 PROJ 테이블을 채운 후, 다음과 같은 코드를 사용하여 최대 인력이 투입된 프로젝트를 찾을 수 있습니다.
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() ); }
최상위 레벨의 인력 배치가 필요한 프로젝트를 보고하기 위한 SELECT문을 응용프로그램의 소스에 표시하려는 경우, 인라인 프로그래밍 양식을 사용할 수 있습니다.
응용프로그램에서 Data 인터페이스에 정의되어 있는 오버로드된 queryList() 메소드의 버전을 호출합니다.
응용프로그램에서는 다음과 유사한 결과를 표시합니다.
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() ); }