You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jOOQ生成Java表类时去除包名中的数据库/架构名

解决jOOQ代码生成包名包含数据库名和架构名的问题

问题背景

使用JDK11+搭配jOOQ 3.19.9代码生成工具,基于SQL Server 2022开发者版生成数据库表对应的Java类时,生成的类包名自动包含了数据库名bank_dd_0002和架构名dbo,示例包名如下:

package dbmetab.bank_dd_0002.dbo.tables;

需要将包名简化为:

package dbmetab.tables;

当前执行的生成命令:

java -classpath jooq-3.19.9.jar;jooq-meta-3.19.9.jar;jooq-codegen-3.19.9.jar;jakarta.xml.bind-api-3.0.0.jar;r2dbc-spi-1.0.0.RELEASE.jar;reactive-streams-1.0.3.jar;mssql-jdbc-12.6.2.jre11.jar;. org.jooq.codegen.GenerationTool ss.xml

原ss.xml配置文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.11.0.xsd">
  <!-- Configure the database connection here -->
  <jdbc>
    <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
    <url>jdbc:sqlserver://;serverName=localhost;databaseName=bank_dd_0002;encrypt=false</url>
    <user>abc</user>
    <password>xxx</password>
  </jdbc>
  <generator>
    <!-- The default code generator. You can override this one, to generate your own code style.
         Supported generators:
         - org.jooq.codegen.JavaGenerator
         - org.jooq.codegen.ScalaGenerator
         Defaults to org.jooq.codegen.JavaGenerator -->
    <name>org.jooq.codegen.JavaGenerator</name>
    <database>
      <!-- The database type. The format here is:
           org.util.[database].[database]Database -->
      <name>org.jooq.meta.sqlserver.SQLServerDatabase</name>
      <!-- The database schema (or in the absence of schema support, in your RDBMS this
           can be the owner, user, database name) to be generated -->
      <!-- All elements that are generated from your schema
           (A Java regular expression. Use the pipe to separate several expressions)
           Watch out for case-sensitivity. Depending on your database, this might be important! -->
      <inputSchema>dbo</inputSchema>
      <includes>
           app_dates|dates|holidays|banks|bank_groups|bank_group_banks
      </includes>
      <!-- All elements that are excluded from your schema
           (A Java regular expression. Use the pipe to separate several expressions).
           Excludes match before includes, i.e. excludes have a higher priority -->
      <excludes></excludes>
    </database>
    <target>
      <!-- The destination package of your generated classes (within the destination directory) -->
      <packageName>dbmetab</packageName>
      <!-- The destination directory of your generated classes. Using Maven directory layout here -->
      <directory>C:\appdir\src\main\java</directory>
    </target>
  </generator>
</configuration>

修改方案

在<database>节点下添加两个配置项,将数据库和架构映射到默认值,从而移除包路径中的数据库名和架构名:

  • <outputSchemaToDefault>true</outputSchemaToDefault>:把指定的输入架构(dbo)转换为默认架构,不生成架构名对应的包层级
  • <outputDatabaseToDefault>true</outputDatabaseToDefault>:把当前连接的数据库(bank_dd_0002)转换为默认数据库,不生成数据库名对应的包层级

修改后的完整配置

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.11.0.xsd">
  <!-- Configure the database connection here -->
  <jdbc>
    <driver>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver>
    <url>jdbc:sqlserver://;serverName=localhost;databaseName=bank_dd_0002;encrypt=false</url>
    <user>abc</user>
    <password>xxx</password>
  </jdbc>
  <generator>
    <!-- The default code generator. You can override this one, to generate your own code style.
         Supported generators:
         - org.jooq.codegen.JavaGenerator
         - org.jooq.codegen.ScalaGenerator
         Defaults to org.jooq.codegen.JavaGenerator -->
    <name>org.jooq.codegen.JavaGenerator</name>
    <database>
      <!-- The database type. The format here is:
           org.util.[database].[database]Database -->
      <name>org.jooq.meta.sqlserver.SQLServerDatabase</name>
      <!-- 新增配置:移除数据库名和架构名的包层级 -->
      <outputDatabaseToDefault>true</outputDatabaseToDefault>
      <outputSchemaToDefault>true</outputSchemaToDefault>
      <!-- The database schema (or in the absence of schema support, in your RDBMS this
           can be the owner, user, database name) to be generated -->
      <!-- All elements that are generated from your schema
           (A Java regular expression. Use the pipe to separate several expressions)
           Watch out for case-sensitivity. Depending on your database, this might be important! -->
      <inputSchema>dbo</inputSchema>
      <includes>
           app_dates|dates|holidays|banks|bank_groups|bank_group_banks
      </includes>
      <!-- All elements that are excluded from your schema
           (A Java regular expression. Use the pipe to separate several expressions).
           Excludes match before includes, i.e. excludes have a higher priority -->
      <excludes></excludes>
    </database>
    <target>
      <!-- The destination package of your generated classes (within the destination directory) -->
      <packageName>dbmetab</packageName>
      <!-- The destination directory of your generated classes. Using Maven directory layout here -->
      <directory>C:\appdir\src\main\java</directory>
    </target>
  </generator>
</configuration>

重新执行原生成命令,生成的Java类包名将变为dbmetab.tables,符合需求。

内容的提问来源于stack exchange,提问作者ps0604

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:05:18