Как динамически изменить имя базы данных в файле MyBatis XML?

Я использую Spring Boot с MyBatis. У меня есть следующий запрос в одном XML-файле картографа.

<select id="someFunction" resultMap="someResultMap">
    SELECT *
    FROM p LEFT JOIN anotherDatabase.table AS q ON p.id = q.id
</select>

На самом деле «anotherDatabase» жестко запрограммирована в моем запросе, потому что я НЕ хочу добавлять еще один источник данных только для этого запроса. Но как я могу сделать это имя «anotherDatabase» динамически (возможно, настроить его в каком-то файле свойств), поскольку оно может измениться в другой развернутой среде?


person Xu Dong Zhang    schedule 02.06.2018    source источник
comment
Я не знаком с myBatis, но можно ли использовать конфигурацию java вместо xml?   -  person Indraneel Bende    schedule 02.06.2018
comment
Возможный дубликат MyBatis - определение глобального параметра   -  person Roman Konoval    schedule 03.06.2018


Ответы (1)


Хотя это уродливое решение, вы можете использовать параметр: не традиционный параметр JDBC/SQL #{schema}, а прямой параметр ${schema}. Видите там знак доллара ($)?

При использовании прямого параметра ${param} вы можете вставлять в SQL все, что хотите. Даже целый оператор SQL, если хотите. Используйте его с осторожностью и только в крайнем случае.

Пожалуйста, обратите внимание, что такая вставка прямых параметров в SQL может быть инъекцией SQL. Вам необходимо тщательно контролировать значение свойства/параметра schema, чтобы оно не исходило от пользователя или какого-либо внешнего источника. Если вы сделаете это так, это будет безопасно для использования.

Однако более чистым решением является использование отдельного источника данных. Единственным недостатком является то, что вам может потребоваться включить двухфазную фиксацию, если вам нужны транзакции, которые объединяют таблицы из обоих источников данных.

person The Impaler    schedule 02.06.2018