可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

生成代码的自定义排序

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

默认情况下,jOOQ 代码生成器保持以下对象排序

  • 目录、模式、表、用户定义类型、包、例程、序列、约束按字母顺序排序
  • 表列、用户定义类型属性、例程参数按定义顺序排序

有时,可能需要将此默认排序覆盖为自定义排序。 特别是,默认排序可能是区分大小写的,而在某些时候,不区分大小写的排序实际上更可取。 用户可以通过在代码生成器的类路径上指定一个完全限定的类来定义一个排序提供程序,该类必须实现 java.util.Comparator<org.jooq.meta.Definition>,如下所示

XML(独立和 Maven)
编程方式
Gradle (Kotlin)
Gradle (Groovy)
Gradle(第三方)
<configuration>
  <generator>
    <database>
      <orderProvider>com.example.CaseInsensitiveOrderProvider</orderProvider>
    </database>
  </generator>
</configuration>

有关更多详细信息,请参见 configuration XSDstandalone code generation,以及 maven code generation

new org.jooq.meta.jaxb.Configuration()
  .withGenerator(new Generator()
    .withDatabase(new Database()
      .withOrderProvider("com.example.CaseInsensitiveOrderProvider")
    )
  )

有关更多详细信息,请参见 configuration XSDprogrammatic code generation

import org.jooq.meta.jaxb.*


configuration {
  generator {
    database {
      orderProvider = "com.example.CaseInsensitiveOrderProvider"
    }
  }
}

有关更多详细信息,请参见 configuration XSDgradle code generation

configuration {
  generator {
    database {
      orderProvider = "com.example.CaseInsensitiveOrderProvider"
    }
  }
}

有关更多详细信息,请参见 configuration XSDgradle code generation

// The jOOQ-codegen-gradle plugin has been introduced in version 3.19.
// Please use the official plugin instead of the third party plugin that was recommended before.
确保您的自定义排序提供程序作为代码生成器依赖项可供代码生成器使用

然后,此排序提供程序可能如下所示

package com.example;

import java.util.Comparator;

import org.jooq.meta.Definition;

public class CaseInsensitiveOrderProvider implements Comparator<Definition> {
    @Override
    public int compare(Definition o1, Definition o2) {
        return o1.getQualifiedInputName().compareToIgnoreCase(o2.getQualifiedInputName());
    }
}

虽然更改“顶级类型”(如表)的顺序与 jOOQ 运行时无关,但更改表列、用户定义类型属性、例程参数的顺序可能会产生一些副作用,因为数据库可能期望与数据库中定义的顺序完全相同。 为了仅更改表的排序,可以改为实现以下排序提供程序

package com.example;

import java.util.Comparator;

import org.jooq.meta.Definition;
import org.jooq.meta.TableDefinition;

public class CaseInsensitiveOrderProvider implements Comparator<Definition> {
    @Override
    public int compare(Definition o1, Definition o2) {
        if (o1 instanceof TableDefinition && o2 instanceof TableDefinition)
            return o1.getQualifiedInputName().compareToIgnoreCase(o2.getQualifiedInputName());
        else
            return 0; // Retain input ordering
    }
}

反馈

您对此页面有任何反馈吗? 我们很乐意听到您的意见!

The jOOQ Logo