当前位置: 首页 > 知识库问答 >
问题:

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

桂宏旷
2023-03-14

我在用Mybatis的春靴。我在一个映射器XML文件中有以下查询。

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

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

共有1个答案

欧阳昊阳
2023-03-14

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

当使用直接参数${param}时,您可以在SQL中插入所需的任何内容。如果您愿意,甚至可以使用整个SQL语句。小心使用,并且只能作为最后的手段。

请仔细考虑这种将直接参数插入SQL的做法可能会导致SQL注入。您需要仔细控制模式属性/参数的值,这样它就不会来自用户或任何外部来源。如果你这样做,它将是安全的使用。

 类似资料:
  • 问题内容: 我想将文件/文件组添加到现有数据库中,但是我需要从变量获取路径,因为在此脚本完成后它将有所不同。当我在SQL Management Studio 2008 R2中检查脚本时,它在处返回错误。 如何使用该变量? 脚本将不会从命令行运行! 问题答案: 使用动态SQL:

  • 我正在开发一个web应用程序,使用React跟踪水果供应商的库存。js,MongoDB,Node。js和Express。我调用了数据库endpoint来呈现表中的数据。现在,我尝试使用按钮增加和减少库存量,但当我尝试设置新状态时,它不起作用。我尝试通过单击更改状态,然后更新数据库中的新状态。有什么建议吗? > 可结果成分: 从'react'导入Reac,{Component};从“react bo

  • 问题内容: 我需要获取SQL Server中的所有表名。为此,我使用以下代码: 我需要使用动态数据库名称。为此,我尝试使用以下代码: 但这是行不通的。我怎样才能做到这一点 ? 问题答案: 或简单地:

  • 问题内容: 我想要一个log4j配置,这样日志文件名应该像$ {System-name} log.log。也就是说,如果该应用程序在任何系统上启动,则无需更改配置文件或代码。它应该生成提到的日志文件名。谢谢。 问题答案: 我这样做: 1)通过以下方式初始化记录器: 2)在log4j.xml中我使用变量:

  • 问题内容: 我有这样的查询结果: 列数未知,因为它是数据透视查询的结果。 我想将列的名称更改为如下所示: 颜色是我从另一个表中检索到的信息。 我怎样才能做到这一点? 谢谢 编辑:这是查询。 问题答案: 模式设置 : 查询 :

  • 在我的项目中,我将数据存储到本地数据库中,为此我使用了Room Library。根据android文档,我已经创建了一个实体类、一个抽象数据库类和一个Dao接口,我已经成功地存储和检索了数据。 有人能帮我解决这个问题吗?提前道谢。