Как динамически изменить имя базы данных в XML-файле MyBatis? - PullRequest
0 голосов
/ 02 июня 2018

Я использую 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" динамически (возможно, настроить его в каком-то файле свойств), так как оно может измениться в другой развернутой среде?

1 Ответ

0 голосов
/ 03 июня 2018

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...