Query Service - OR Mapping

다음은 OR mapping를 사용하는 예로, query 정의없이 object만을 사용해서 기본적인 INSERT, UPDATE, DELETE, SELECT를 실행한다.

Query 서비스 속성 정의 파일 Sample

다음은 Query 서비스를 정의한 applicationContext-query-common.xml 과 Query 서비스에서 읽어들일 매핑 XML 파일의 위치를 정의한 applicationContext-query-sqlloader.xml 파일의 일부이다.
<bean id="queryService" class="anyframe.core.query.impl.QueryServiceImpl">
	<property name="jdbcTemplate" ref="jdbcTemplate"/>
	<property name="sqlRepository" ref="sqlLoader"/>
	<!-- 중략 -->
</bean>
<bean id="jdbcTemplate" class="anyframe.core.query.impl.jdbc.PagingJdbcTemplate">
  <property name="dataSource" ref="common_datasource" />
</bean>  
<!-- 중략 -->

<bean name="sqlLoader" class="anyframe.core.query.impl.config.loader.SQLLoader">
   	<config:configuration>
 		    <filename>
 		      classpath:/services/query/mappings/mapping-ormapping-query.xml
 		    </filename>
 		    <!-- 중략 -->
	</config:configuration>		
</bean> 
<!-- 중략 -->

매핑 XML 파일 Sample

다음은 앞서 정의한 Query 서비스를 통해 로드된 mapping-ormapping-query.xml 로, 테이블 TBL_ORMapping와 ORMappingVO 클래스 사이의 매핑 정보를 포함하고 있다.
<queryservice>
	<table-mapping>
		<table name="TBL_ORMapping"
			class="integration.anyframe.services.query.vo.ORMappingVO">
			<field-mapping>
				<dbms-column>id</dbms-column>
				<class-attribute>id</class-attribute>
			</field-mapping>
			<field-mapping>
				<dbms-column>name</dbms-column>
				<class-attribute>nm</class-attribute>
			</field-mapping>
			<field-mapping>
				<dbms-column>address</dbms-column>
				<class-attribute>addr</class-attribute>
			</field-mapping>
			<primary-key>
				<dbms-column>id</dbms-column>
			</primary-key>
		</table>
	</table-mapping>
</queryservice>

OR Mapping시 사용할 매핑 클래스 Sample

다음은 앞서 언급한 매핑 XML 파일에 정의된 OR Mapping 정보를 기반으로 특정 테이블에 데이터를 INSERT, UPDATE, SELECT할 때 사용되는 클래스 ORMappingVO.java 내용의 일부이다.
public class ORMappingVO implements Serializable {

	public String id;
	public String nm;
	public String addr;
	public ORMappingVO() {
	}
	
	public ORMappingVO(String i, String n, String a) {
		id = i;
		nm = n;
		addr = a;
	}
	
	// getter, setter ...
}

Query 서비스 테스트 코드 Sample

다음은 매핑 XML 파일에 별도 쿼리문을 정의하지 않고 객체만을 이용하여 INSERT, SELECT, UPDATE, DELETE를 실행하는 소스 코드 QueryServiceTestORMapping.java 이다. 매핑 클래스에 필요한 값을 셋팅하여 Query 서비스에 전달함으로써 해당하는 쿼리문을 실행시킬 수 있다.
/**
 * Query 서비스를 통해 DB에 신규 데이터를 입력하는 테스트 코드
 */	
public void testInsertQuery() throws Exception {
	IQueryService queryService = (IQueryService) context
	.getBean("queryService");
	
	// ORMappingVO 객체에 초기값을 셋팅하고 이 객체를 통해 INSERT를 실행한다.
	// 다음 코드에 의해 실행되는 쿼리문은
	// INSERT INTO TBL_ORMapping (address ,name ,id ) 
	// values ( '1234567890123', 'HonggilDong', 'Ansan' )
	
	ORMappingVO ormappingVO = new ORMappingVO("1234567890123", "HonggilDong", "Ansan");
	
	int result = queryService.create(ormappingVO);
	if( result == -1 ){
		throw new Exception("Insert failed");
	}
}

/**
 * Query 서비스를 통해 DB에 입력된 데이터를 조회하는 테스트 코드
 */	
public void testSelectQuery() throws Exception {
	IQueryService queryService = (IQueryService) context
	.getBean("queryService");
	
	// primary-key로 지정한 칼럼에 매핑되는 attribute에 값을 입력하고 
	// find를 실행하면 primary-key를 조회 조건으로  하는 SELECT를 실행한다.
	// 다음 코드에 의해 실행되는 쿼리문은 
	// SELECT NAME, ADDRESS FROM TBL_ORMAPPING WHERE ID = '1234567890123'
	
	ORMappingVO ormappingVO = new ORMappingVO();
	ormappingVO.setId("1234567890123");

	Collection result = queryService.find(ormappingVO);
	if ( result.size() != 1 ){
		throw new Exception("Select failed");
	}
}

/**
 * Query 서비스를 통해 DB에 입력된 데이터를 수정하는 테스트 코드
 */	
public void testUpdateQuery() throws Exception {
	IQueryService queryService = (IQueryService) context
	.getBean("queryService");
	
	// 다음 코드에 의해 실행되는 쿼리문은 
	// Update TBL_ORMapping set address = 'Seoul' ,name = 'HonggilDong'  where id = '1234567890123'
	
	ORMappingVO ormappingVO = new ORMappingVO("1234567890123", "HonggilDongn", "Seoul");
	
	int result = queryService.update(ormappingVO);
	if ( result == -1 ){
		throw new Exception("Update failed");
	}
}

/**
 * Query 서비스를 통해 DB에 입력된 데이터를 삭제하는 테스트 코드
 */	
public void testDeleteQuery() throws Exception {
	IQueryService queryService = (IQueryService) context
	.getBean("queryService");
		
	// 다음 코드에 의해 실행되는 퀴리문은 
	// DELETE FROM TBL_ORMapping where id = 1234567890123
	
	ORMappingVO ormappingVO = new ORMappingVO();
	ormappingVO.setId("1234567890123");
	
	int result = queryService.remove(ormappingVO);
	if ( result == -1 ){
		throw new Exception("Update failed");
	}
}
앞서 소개된 샘플 테스트 코드를 포함하여 Query 서비스 소개 페이지에서 제공하는 모든 샘플 테스트 코드는 HSQL DB를 기반으로 실행된다. ( 단, ※ CallableStatement, LOB의 경우는 Oracle 9i, 10g를 기반으로 함. )

Resources

  • 다운로드
  • 샘플 테스트 코드를 포함하고 있는 anyframe-querytest-src.zip 파일을 다운받은 후, 테스트 환경 설정 을 참조하여 위에서 제시한 예제 코드를 실행해 볼 수 있다.
    Name
    Download
    anyframe-querytest-src.zip
    Download