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}"/>
然后,SqlSessionFactoryBuilder
的 build()
方法将 XML 中的 "${url}"
替换为属性 的值“url”
由 props
提供。
关于java - 在 MyBatis 3.0.6 中使用 configuration.xml 文件并提供 DataSource 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7704510/