当前位置: 首页 > 面试题库 >

Jooq在生成的查询中动态更改数据库的架构

霍伟彦
2023-03-14
问题内容

我在简单的数据库中有2个相似的模式-“ develop”和“ stage”。我已经使用Jooq为其中一种模式生成了Java类(例如“
develop”)。当jooq生成对db的查询时,它将隐式地将架构名称添加到所有查询的别名中

select "develop"."image"."id", "develop"."image"."image_data" 
from "develop"."image" 
where "develop"."image"."id" = ?

所以我的问题是,是否有办法在生成的查询中更改jooq模式名称(例如以“ stage”为例),而无需为“ stage”模式重新生成jooq的类呢?


问题答案:

您有几种选择,甚至可以结合使用:

使用代码生成器的模式映射功能

如果要避免将"develop"模式名称硬连接到生成的类中,可以将其重写为其他某种模式名称,如下所示:

<configuration>
  <generator>
    <database>
      <schemata>
        <schema>
          <inputSchema>develop</inputSchema>
          <outputSchema>stage</outputSchema>
        </schema>
      ...

当然,这只是推迟了问题,因为架构名称仍在生成的代码中。您可以使用以下选项从生成的代码中完全删除该名称:

<configuration>
  <generator>
    <database>
      <schemata>
        <schema>
          <inputSchema>develop</inputSchema>
          <outputSchemaToDefault>true</outputSchemaToDefault>
        </schema>
      ...

现在,这将从生成的代码中删除所有架构引用,因此生成的类可以在您的所有架构上运行(当然,请确保使用正确的连接和search_path!)

我认为这是最适合您的选择

此处有更多详细信息:https :
//www.jooq.org/doc/latest/manual/code-generation/codegen-advanced/codegen-
config-catalog-and-schema-
mapping/

使用运行时模式映射功能

您可以按原样保留生成的代码,并在运行时使用Settings(提供给jOOQ运行时Configuration)重写所有对象引用。同样,您有两个相同的选择:

映射架构名称:

new Settings().withRenderMapping(new RenderMapping()
  .withSchemata(new MappedSchema()
    .withInput("develop")
    .withOutput("stage")
  )
);

删除所有架构名称:

new Settings().withRenderSchema(false);

此处有更多详细信息:https :
//www.jooq.org/doc/latest/manual/sql-building/dsl-context/custom-
settings/settings-render-mapping/



 类似资料:
  • Spring官方JPA规范文档 我对非常陌生,所以任何指导都很有价值。

  • 问题内容: 根据本文,您可以使用Spring Framework中的AbstractRoutingDataSource来动态更改应用程序使用的数据源。 但是,使用的数据源是通过配置定义的,而不是通过编程定义的。有没有一种方法可以配置要在运行时使用的数据源? 该解决方案的可扩展性如何,即数据源数量上的限制是什么? 谢谢! 问题答案: 我已经为30个数据源实现了这种方法,并且它们当前正在生产环境中运行

  • 我有一个GraphQL服务器,它能够为指定源提供timeseries数据(例如,传感器数据)。获取传感器数据的示例查询可能是: 在我的前端,我想允许用户选择一个或多个源,并显示一个图表,每一个都有一行。通过使用下面这样的查询,似乎可以实现以下操作: 大多数GraphQL教程似乎关注于静态查询(例如,唯一改变的是变量,而不是请求的实际形状)--但在我的例子中,我需要查询本身是动态的(为我选择的每个I

  • 本文向大家介绍Java的MyBatis框架中对数据库进行动态SQL查询的教程,包括了Java的MyBatis框架中对数据库进行动态SQL查询的教程的使用技巧和注意事项,需要的朋友参考一下 其实MyBatis具有的一个强大的特性之一通常是它的动态 SQL 能力。 如果你有使用 JDBC 或其他 相似框架的经验,你就明白要动态的串联 SQL 字符串在一起是十分纠结的,确保不能忘了空格或在列表的最后省略

  • PM给我们提了个需求,是快速做一个查询工具(web app) 预设几种查询的数据集(配好join之类的关联) 然后可以在前端页面上直接设置查询条件,导出结果表单 要求就是不花很多功夫(因为只是一个小工具),配好数据集之后就能用 可以自定义查询条件和输出的字段 因为数据量比较大,不能直接查出结果之后写filter过滤 想问下有没有这种简单好用的框架

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