MyBatis文档显示了通过Java代码构建SqlSessionFactory
到XML配置文件或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 not not null”异常,表明该属性未被成功覆盖。我认为该属性的名称应采用特殊格式,但我无法找出该格式是什么。
提前感谢所有帮助。
答案 0 :(得分:1)
在配置XML中,您可以插入数据源URL的占位符,如下所示:
<property name="url" value="${url}"/>
然后,build()
SqlSessionFactoryBuilder
方法将"${url}"
替换为"url"
中props
提供的属性{{1}}。