使用configuration.xml文件并在MyBatis 3.0.6中提供数据源设置



MyBatis文档展示了一种通过XML配置文件构建SqlSessionFactory或通过Java代码构建Configuration对象的方法。它还提到传递属性,这些属性将覆盖XML文件中指定的内容。

我正在尝试使用属性功能来提供除XML配置之外的数据源URL,但没有设置属性。

下面是我使用的配置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文件适用于所有内容,但我需要通过Java代码提供url(通过代码,它是从另一个配置文件获得的,因此必须动态地提供给MyBatis)。我知道我可以在代码中完成这一切,但这将是不必要的工作,所以我想避免这种路线,如果可能的话。

根据手册中的描述,我从XML文件中删除了url行,并产生了以下代码:

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不能为空"异常,表明该属性未成功覆盖。我认为属性的名称应该是一种特殊的格式,但是我找不到那种格式。

提前非常感谢所有的帮助。

在配置XML中,您可以为数据源URL插入一个占位符,如下所示:

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

SqlSessionFactoryBuilderbuild()方法将XML中的"${url}"替换为props提供的属性"url"的值

最新更新