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

时间:2018-06-02 01:53:17

标签: sql spring-boot mybatis ibatis spring-mybatis

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

请仔细考虑将此直接参数插入到SQL中是否容易受到 SQL注入的影响。您需要仔细控制schema属性/参数的值,因此它不是来自用户或任何外部源。如果你这样做,它将是安全的。

但是,更清洁的解决方案是使用单独的数据源。唯一的缺点是,如果需要从两个数据源中分析表的事务,则可能需要启用两阶段提交。