2

私は現在jooqを評価しています。私はそれにとても慣れていません。jooq を使用して SQL Server 2008 R2 データベースにアクセスしたいと考えています。クラスを生成すると、codegen ツールが実行され、そのサーバー上のすべてのデータベースからオブジェクトのコードが生成されますが、これは私が望んでいるものではありません。

ツールを 1 つのデータベースのみに制限するには、構成ファイルでどのような設定を使用しますか? ドキュメントを確認しましたが、それほど明白ではありません。<includes></includes>テーブルを制限するには、 andを使用できると思い<excludes></excludes>ます。

同じタグを使用して、[データベース].[スキーマ].[テーブル] の 3 つの部分からなる完全修飾テーブル名を使用して、特定のデータベース内のオブジェクトのみにツールを制限できますか?

その他のコメント:

  • テーブル、ビュー、プロシージャ、関数などのオブジェクト タイプごとに包含/除外ルールを指定できるツールがあればいいのですが。

  • 可能であれば、テーブル/ビュー/プロシージャのクラスをまとめてまとめるのではなく、別々のパッケージに配置します。

  • データベースの 1 つにスキーマが<Domain>\<user name>あり、生成されたコードが無効でした。文字列で\生成されることを確認してください。\\

ありがとう

4

1 に答える 1

2

現在の質問/コメントに対する回答:

同じタグを使用して、[データベース].[スキーマ].[テーブル] の 3 つの部分からなる完全修飾テーブル名を使用して、特定のデータベース内のオブジェクトのみにツールを制限できますか?

はい、<includes/>and<excludes/>要素は修飾名と非修飾名の両方に一致するため、たとえば除外できますdatabase.schema.table(括弧を除外します)。

テーブル、ビュー、プロシージャ、関数などのオブジェクト タイプごとに包含/除外ルールを指定できるツールがあればいいのですが。

確かに、それはロードマップにある: #5263

可能であれば、テーブル/ビュー/プロシージャのクラスをまとめてまとめるのではなく、別々のパッケージに配置します。

ジェネレーター戦略で現在の動作をオーバーライドできます。

データベースの 1 つにスキーマがあり、生成されたコードは無効でした。\ が文字列の \ に生成されることを確認してください。

はい、<includes/>および<excludes/>要素 (コード ジェネレーター構成の他の多くの要素と同様) は、関連するすべてのセマンティクスを含む Java 正規表現を取ります。

実際の問題に対するより良い解決策:

jOOQ 3.9 では、コード ジェネレーターでカタログ/スキーマ マッピング機能を使用できます。それを構成するには、さまざまな方法があります。

1 つの入力カタログのみ (SQL Server がデータベースと呼ぶものの標準名)

これは、開始するための最も簡単な構成です。単一のデータベース内にすべてを生成します。

<configuration>
  <generator>
    <database>
      <inputCatalog>database</inputCatalog>
      ...

生成された出力を、そのデータベース内の単一のスキーマのみにさらに削減できます。

<configuration>
  <generator>
    <database>
      <inputCatalog>database</inputCatalog>
      <inputSchema>schema</inputSchema>
      ...

複数の入力カタログ

より洗練されたセットアップ (またはプロジェクトの成長) では、より適切なアプローチは、すべてのカタログとスキーマを明示的にリストすることです。

<configuration>
  <generator>
    <database>
      <catalogs>

        <!-- This configuration generates everything inside of that catalog -->
        <catalog>
          <inputCatalog>database1</inputCatalog>
        </catalog>

        <!-- This configuration generates only some schemas inside of the catalog -->
        <catalog>
          <inputCatalog>database2</inputCatalog>
          <schemata>
            <schema>
              <inputSchema>schema1</inputSchema>
            </schema>
            <schema>
              <inputSchema>schema2</inputSchema>
            </schema>
          </schemata>
        </catalog>
      ...

バックグラウンド:

デフォルトでは、jOOQ コード ジェネレーターは常に、表示できるものすべてを生成します。これを明示的に制限するには、次の 2 つの方法があります。

  1. コード ジェネレーターのカタログ/スキーマ マッピング機能
  2. 標準表現<includes/><excludes/>正規表現(すべてのオブジェクトに適用されます)

jOOQ 3.8 では、複数のカタログ (SQL Server: データベース) のコード生成サポートが追加されましたが、カタログ マッピング機能による制限のサポートは追加されていません。これは、jOOQ 3.9 で修正され、カタログ マッピングが追加されました ( #4794 )。

#4794より前の唯一の回避策は<excludes/>、不要なカタログからすべてのコンテンツを除外することでした。その結果、jOOQ 3.8 コード ジェネレーターは空のカタログのみを生成していました。

jOOQ User Group のこのディスカッションも参照してください。

于 2016-12-28T09:16:33.637 に答える