Я ссылался на ответ вопроса, чтобы перенести SQL-запрос SQL во внешний файл. Как я могу динамически разрешить имя таблицы в запросах (пользовательский Java-класс Util, который возвращает полное имя таблицы со схемой).
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="getPersonById">
<![CDATA[
Select Name From Person **<!-- How to Dynamically resolve the table Name here-->**
Where Id =?
]]>
</entry>
<entry key="getPersonBySSN">
<![CDATA[
]]>
</entry>
</properties>
В контексте приложения Spring загрузите этот xml-файл
<bean id="queryProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="locations" value="classpath:/queries.xml" />
</bean>
Внедрите этот компонент в ваш класс DAO
<bean id="myDAO" class="com.xyz.dao.MyDAOImpl">
<property name="queryProps" ref="queryProps" />
</bean>
Определите queryProps в вашем классе DAO и не забудьте иметь метод установки для этого
private Properties queryProps;
Теперь вы можете получить доступ к запросу в вашей DAO следующим образом -
String query = queryProps.getProperty("getPersonById");
Преобразователь имен таблиц Util Class:
public class TableNameResolver{
public static String getTableName(String tableShortName){
//Custom logic that return the full table name
return "Full Table Name";
}
}