어노테이션이 있는 메소드를 사용하면 다음과 같은 이점이 있습니다.
데이터 액세스 오브젝트를 작성하는 인터페이스를 써서 DAO(Data Access Object) 패턴을 따르는 사용자 정의 인터페이스를 작성할 수 있습니다. 인터페이스 쓰기가 완료되면 pureQuery 생성 프로그램 유틸리티를 실행하여 인터페이스를 구현하는 클래스의 정의를 생성합니다. 애플리케이션에 대한 코드를 쓸 때 이 구현 클래스의 인스턴스를 작성한 다음 해당 인스턴스에서 구현되는 메소드를 호출할 수 있습니다. 메소드에 매개변수를 제공하고 쿼리 결과를 수신하기 위해 Java 오브젝트, Bean 및 콜렉션을 사용할 수 있습니다.
예를 들어, 다음 메소드는 @Select 어노테이션을 사용하며 CustomerQuery라는 인터페이스에 표시될 수 있습니다. 이 인터페이스에서는 CUSTOMER라고 이름 지정된 테이블의 레코드를 쿼리 또는 업데이트하기 위한 메소드를 정의합니다.
@Select(sql="SELECT CUSTID, NAME FROM CUSTOMER WHERE REGION = ?1") List<Customer> getCustomersInRegion(int r);
인터페이스를 컴파일하고 pureQuery 생성 프로그램 유틸리티를 사용하여 인터페이스를 구현하는 CustomerQueryImpl으로 이름 지정된 클래스를 작성하면, 애플리케이션은 메소드를 호출하여 리턴된 목록에서 쿼리 결과를 검색할 수 있습니다.
Connection con = DriverManager.getConnection(...); CustomerQuery cQuery = DataFactory.getData(CustomerQuery.class, con); int region = 123; List<Customer> customersInRegion = cQuery.getCustomersInRegion(region);
위 코드에서 수행하는 단계는 다음과 같습니다.
코드는 구현 클래스가 아니라 CustomerQuery 인터페이스를 직접 참조함에 유의하십시오.생성된 구현 클래스와 관계없이 애플리케이션을 컴파일할 수 있습니다.
XML 파일을 사용하여 인터페이스에 정의된 메소드의 어노테이션에 있는 SQL문을 겹쳐쓸 수 있습니다. XML 파일에 SQL문을 제공하고 인터페이스에 대한 구현 클래스를 생성할 때 pureQuery 생성 프로그램 유틸리티에 해당 파일을 제공합니다. 이러한 방식으로 해당 애플리케이션이 다른 데이터베이스와 연관되어 있을 때 둘 이상의 애플리케이션에서 인터페이스를 다시 사용할 수 있습니다.
예를 들어, DB2 데이터베이스에 대해 작업하는 하나의 애플리케이션과 Oracle 데이터베이스에 대해 작업하는 유사한 애플리케이션이 있을 수 있습니다. Customer라는 인터페이스에 DB2 데이터베이스와 호환 가능한 SQL문이 포함되어 있을 수 있습니다. 두 번째 애플리케이션에 대해 인터페이스를 다시 사용하려면, Customer 인터페이스의 구현 클래스를 생성할 때 Oracle 데이터베이스와 호환 가능한 SQL문을 포함하는 XML 파일을 pureQuery 생성 프로그램 유틸리티에 제공합니다.