인라인 메소드를 사용하는 애플리케이션의 SQL문 겹쳐쓰기

애플리케이션에서 인라인 메소드를 사용하는 경우, 런타임 시 해당 메소드의 SQL문을 유사한 SQL문으로 바꿀 수 있습니다.

Data 인터페이스의 구현을 작성하기 위해 DataFactory.getData() 메소드를 호출할 때, java.util.Map<Object,Object> 오브젝트를 전달할 수 있습니다. Map의 키는 바꾸려는 SQL문입니다. Map의 값은 대신 사용하려는 SQL문입니다.

String sql 매개변수가 있는 Data 오브젝트에서 메소드를 호출할 때, pureQuery는 해당 메소드에 전달하는 각 SQL문을 Map 오브젝트의 키와 일치시키려고 시도합니다. 키로 사용된 SQL문에 대한 일치가 있을 때마다 pureQuery는 Map에서 해당 값으로 사용된 SQL문을 사용합니다. 일치가 없는 경우, pureQuery는 원래의 SQL문을 실행합니다.

제한사항

메소드에 전달되는 SQL문은 키로 사용된 SQL문과 정확히 일치해야 합니다. 예를 들어, 공백 또는 대문자 표기가 다른 경우, 나머지가 동일한 두 SQL문은 일치하지 않습니다.

SQL 값은 Data 메소드가 호출될 때 SQL 키가 올바르게 실행될 수 있을 만큼 유사해야 합니다. 예를 들어, INSERT문은 SELECT문을 바꿀 수 없습니다.

SQL 키 및 값은 호환 가능한 입력 및 출력을 가지고 있어야 합니다. 예를 들어, 자동차 오브젝트를 리턴하는 SQL SELECT문은 비행기 오브젝트의 특성을 리턴하는 SELECT문과 바꿀 수 없습니다.

예제

간단한 예제는 프로덕션 시스템에서 사용된 SQL문을 테스트 시스템에서 테스트된 SQL문과 바꾸는 것입니다. 그러나 더 복잡한 상황에서는 SQL문을 겹쳐쓰는 것이 유용할 수 있습니다.

다양한 분량의 데이터를 조작하는 SQL문을 실행해야 한다고 가정하십시오. 예를 들어, 일, 주 또는 분기별로 데이터를 요약하는 비즈니스 보고서가 필요할 수 있습니다. 또는 보안 액세스 레벨에 따라 직원이 실행하는 쿼리를 제한하려고 할 수 있습니다. 이러한 상황에서 두 애플리케이션이 다르게 실행되는 것은 수행된 SQL이 변경되었기 때문입니다.

pureQuery 이전에는 이러한 유형의 문제점을 해결하기 위해 다음과 같은 옵션을 포함했습니다.

이러한 접근법은 효과가 있습니다. 그러나 pureQuery를 사용하면 아마도 파일로 직렬화되거나 그렇지 않으면 실행 중인 애플리케이션에 액세스할 수 있는 Map의 인스턴스에 액세스할 수 있는 단일 애플리케이션을 작성할 수 있습니다. Map 오브젝트의 선택 항목은 애플리케이션이 수행하는 작업을 결정합니다.

Map을 제공하지 않으면 애플리케이션이 기본적이고 기본이고 영향이 적고 보안성이 높은 버전의 SQL문을 실행할 수 있습니다. Map을 제공하면 애플리케이션이 애플리케이션을 실행 중인 사용자에게 적절한 액세스 레벨을 제공하는 SQL문을 포함할 수 있습니다.


피드백