我正在使用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”名称(可能在某些属性文件中配置它),因为它可能在部署的不同环境中发生变化?
答案 0 :(得分:0)
虽然难看的解决方案,但您可以使用参数:不是传统的JDBC / SQL参数#{schema}
,而是直接参数${schema}
。在那里看到美元符号($)?
使用直接参数${param}
时,您可以在SQL中插入任何内容。如果你愿意,甚至整个SQL语句。请谨慎使用,仅作为最后的手段。
请仔细考虑将此直接参数插入到SQL中是否容易受到 SQL注入的影响。您需要仔细控制schema
属性/参数的值,因此它不是来自用户或任何外部源。如果你这样做,它将是安全的。
但是,更清洁的解决方案是使用单独的数据源。唯一的缺点是,如果需要从两个数据源中分析表的事务,则可能需要启用两阶段提交。