Вопрос

Во-первых, проблема: я использую XML-запросы, а SQL содержит имя базы данных как часть имени таблицы.Например: SELECT * from mydb.bar.К сожалению, базы данных создаются / именуются повсюду, и часть генерируемого кода кода действительно динамична и может измениться в любой момент.Итак, я хотел заменить его свойством, чтобы он выглядел как mudb, а затем я определил следующий раздел в mybatis-config.xml:

родовое слово

Но когда я запускаю запрос, SELECT * FROM ${dbname}.bar возвращает значение null.То же самое произойдет, если я определю это свойство в файле свойств.Я бы не хотел передавать это как часть каждого параметра вызова, поскольку это действительно глобальное свойство.Это можно сделать?И если да - как?

Это было полезно?

Решение

Да, можно!Возможно, это какая-то странная недокументированная функция.При создании объекта конфигурации сделайте что-нибудь вроде этого.(org.apache.ibatis.session.Configuration)

родовое слово

Затем на вашей карте XML вы можете ссылаться.

родовое слово

Другие советы

У меня была такая же проблема с использованием Spring + MyBatis, и я решил ее, установив «configurationProperties», используя мое определение Spring XML для sqlSessionFactory.В моем примере ниже показано, как установить настраиваемое глобальное свойство с именем encryptionKey со значением, которое можно либо жестко запрограммировать в XML-файле, либо загрузить из внешнего файла с помощью тега context: property-placeholder (как показано ниже).

родовое слово

Я использовал конфигурацию XML, но не Spring, и установил свойство внутри объекта Configuration, но обнаружил, что это необходимо сделать до загрузки файлов сопоставления (см. здесь ).Я отказался от объектного подхода конфигурации и выбрал следующий подход, который у меня сработал:

родовое слово

Затем, как написал Энди Прайор, используйте в преобразователе XML код select * from ${dbname}.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top