Использование файла configuration.xml и предоставление настроек источника данных в MyBatis 3.0.6 - PullRequest
1 голос
/ 09 октября 2011

В документации MyBatis показан способ создания SqlSessionFactory с помощью файла конфигурации XML или Configuration объекта с помощью кода Java. В нем также упоминаются передаваемые свойства, которые будут переопределять то, что указано в файле XML.

Я пытаюсь использовать средство свойств для предоставления URL источника данных в дополнение к конфигурации XML, но свойство не устанавливается.

Вот XML-файл конфигурации, который я использую (для краткости удалены все псевдонимы и сопоставления):

<configuration> 
  <typeAliases>
    <typeAlias alias="Item" type="com.example.project.Item"/> 
  </typeAliases>

  <environments default="development"> 
      <environment id="development"> 
      <transactionManager type="JDBC"/> 
      <dataSource type="POOLED"> 
        <property name="driver" value="org.h2.Driver"/> 
        <property name="url" value="jdbc:h2:C:/path_to_db_file_in_the_filesystem"/>   
        <property name="username" value="sa"/> 
        <property name="password" value="sa"/>     
      </dataSource> 
    </environment> 
  </environments> 

  <mappers> 
    <mapper resource="com/example/project/mappers/ItemMapper.xml"/> 
  </mappers>

</configuration> 

XML-файл отлично работает для всех, но мне нужно предоставить url через код Java (через код он получается из другого файла конфигурации, поэтому его необходимо динамически передавать в MyBatis). Я знаю, что могу делать все это в коде, но это будет ненужной работой, поэтому я хотел бы избежать этого пути, если это возможно.

На основании описания в руководстве я удалил строку url из файла XML и получил следующий код:

String resource = "com/example/project/MyBatisConfiguration.xml"; 
Reader reader = Resources.getResourceAsReader(resource); 

Properties props = new Properties();
props.setProperty("url", url);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader, props);

Код создает SqlSessionFactory, но я получаю исключение "url не может быть пустым", указывающее, что свойство не было успешно перезаписано. Я думаю, что имя свойства должно быть в специальном формате, но я не смог выяснить, что это за формат.

Заранее большое спасибо за помощь.

1 Ответ

1 голос
/ 09 октября 2011

В XML-файле конфигурации вы можете вставить заполнитель для URL источника данных, например:

<property name="url" value="${url}"/>

Затем метод build() для SqlSessionFactoryBuilder заменяет "${url}" в XML значением свойства"url" предоставлено props.

...