XML 설정을 이용한 분리

개별 프로퍼티 방식

⇒ 테이블 이름이나 필드 이름, sql을 변경할 때 xml 파일만 바꾸면 되기에 변경에 유연하게 대처할 수 있다.

<bean id="userDao" class="...">
	<property name="datasource" ref="datasource"/>
	<property name="sqlAdd" value="insert into users(id, name) values(?, ?)"/>
...
</bean>

sql 맵 프로퍼티 방식

<bean id="userDao" class="...">
	<property name="datasource" ref="datasource"/>
	<property name="sqlMap">
		<map>
			<entry key="add" value="insert into users(id, name) values(?,?)"/>
			<entry key="get" value="select * from users"/>
		</map>
	</property>
...
</bean>

SqlService( Sql 제공 서비스 )

Sql 서비스 인터페이스

public interface SqlService{
	String getSql(String key) throws SqlRethrievalFailureException;
}

public class SqlRethrievalFailureException extends RuntimeException{
	public SqlRethrievalFailureException(String message){
		super(message);
	}
	
	public SqlRethrievalFailureException(String message, Throwable cause){
		super(message, cause);
	}
}