如何在 MyBatis XML 文件中动态更改数据库名称?

How to change the database name dynamically in MyBatis XML file?

我正在使用 Spring Boot with MyBatis。我在一个映射器 XML 文件中有以下查询。

<select id="someFunction" resultMap="someResultMap">
    SELECT *
    FROM p LEFT JOIN anotherDatabase.table AS q ON p.id = q.id
</select>

实际上 "anotherDatabase" 在我的查询中是硬编码的,因为我不想只为这个查询添加另一个数据源。但是我怎样才能动态地创建这个 "anotherDatabase" 名称(也许在某些属性文件中配置它)因为它可能会在部署的不同环境中发生变化?

虽然丑陋的解决方案,但您可以使用参数:不是传统的 JDBC/SQL 参数 #{schema},而是直接参数 ${schema}。看到那里的美元符号 ($) 了吗?

使用直接参数 ${param} 时,您可以将任何内容插入 SQL。如果您愿意,甚至可以是完整的 SQL 语句。谨慎使用,仅作为最后手段

请仔细考虑将直接参数插入 SQL 容易受到 SQL 注入 的影响。您需要仔细控制 schema property/parameter 的值,使其不来自用户或任何外部来源。如果你这样做,就可以放心使用了。

但是,更简洁的解决方案是使用单独的数据源。唯一的缺点是,如果您需要包含来自两个数据源的表的事务,您可能需要启用两阶段提交。