Available in versions: Dev (3.20) | Latest (3.19)

Matching UDTs

Applies to ✅ Open Source Edition   ✅ Express Edition   ✅ Professional Edition   ✅ Enterprise Edition

The following example shows how to define a MatcherStrategy for generated org.jooq.UDT and org.jooq.UDTRecord types and related objects:

XML (standalone and maven)
Programmatic
Gradle (Kotlin)
Gradle (Groovy)
Gradle (third party)
<configuration>
  <!-- These properties can be added directly to the generator element: -->
  <generator>
    <strategy>
      <matchers>

        <!-- Specify 0..n table matchers to provide a strategy for naming objects created from UDTs. -->
        <udts>
          <udt>

            <!-- Match unqualified or qualified UDT names. If left empty, this matcher applies to all UDTs. -->
            <expression>MY_UDT</expression>

            <!-- These elements influence the naming of a generated org.jooq.UDT object. -->
            <udtClass> a MatcherRule specification </udtClass>
            <udtIdentifier> a MatcherRule specification </udtIdentifier>
            <udtExtends>com.example.MyOptionalTableBaseType</udtExtends>
            <udtImplements>com.example.MyOptionalCustomInterface</udtImplements>

            <!-- These elements influence the naming of a generated org.jooq.UDTPathField object. -->
            <pathClass> a MatcherRule specification </pathClass>
            <pathExtends>com.example.MyOptionalTableBaseType</pathExtends>
            <pathImplements>com.example.MyOptionalCustomInterface</pathImplements>

            <!-- These elements influence the naming of a generated org.jooq.UDTRecord object. -->
            <recordClass> a MatcherRule specification </recordClass>
            <recordExtends>com.example.MyOptionalRecordBaseType</recordExtends>
            <recordImplements>com.example.MyOptionalCustomInterface</recordImplements>

            <!-- These elements influence the naming of a generated interface, implemented by
                 generated org.jooq.UDTRecord objects and by generated POJOs. -->
            <interfaceClass> a MatcherRule specification </interfaceClass>
            <interfaceImplements>com.example.MyOptionalCustomInterface</interfaceImplements>

            <!-- These elements influence the naming of a generated POJO object.  -->
            <pojoClass> a MatcherRule specification </pojoClass>
            <pojoExtends>com.example.MyOptionalPojoBaseClass</pojoExtends>
            <pojoImplements>com.example.MyOptionalCustomInterface</pojoImplements>
          </udt>
        </udts>
      </matchers>
    </strategy>
  </generator>
</configuration>

See the configuration XSD, standalone code generation, and maven code generation for more details.

new org.jooq.meta.jaxb.Configuration()

  // These properties can be added directly to the generator element:
  .withGenerator(new Generator()
    .withStrategy(new Strategy()
      .withMatchers(new Matchers()

        // Specify 0..n table matchers to provide a strategy for naming objects created from UDTs.
        .withUdts(
          new MatchersUDTType()

            // Match unqualified or qualified UDT names. If left empty, this matcher applies to all UDTs.
            .withExpression("MY_UDT")

            // These elements influence the naming of a generated org.jooq.UDT object.
            .withUdtClass(MatcherRule. a MatcherRule specification )
            .withUdtIdentifier(MatcherRule. a MatcherRule specification )
            .withUdtExtends("com.example.MyOptionalTableBaseType")
            .withUdtImplements("com.example.MyOptionalCustomInterface")

            // These elements influence the naming of a generated org.jooq.UDTPathField object.
            .withPathClass(MatcherRule. a MatcherRule specification )
            .withPathExtends("com.example.MyOptionalTableBaseType")
            .withPathImplements("com.example.MyOptionalCustomInterface")

            // These elements influence the naming of a generated org.jooq.UDTRecord object.
            .withRecordClass(MatcherRule. a MatcherRule specification )
            .withRecordExtends("com.example.MyOptionalRecordBaseType")
            .withRecordImplements("com.example.MyOptionalCustomInterface")

            // These elements influence the naming of a generated interface, implemented by
            // generated org.jooq.UDTRecord objects and by generated POJOs.
            .withInterfaceClass(MatcherRule. a MatcherRule specification )
            .withInterfaceImplements("com.example.MyOptionalCustomInterface")

            // These elements influence the naming of a generated POJO object.
            .withPojoClass(MatcherRule. a MatcherRule specification )
            .withPojoExtends("com.example.MyOptionalPojoBaseClass")
            .withPojoImplements("com.example.MyOptionalCustomInterface")
        )
      )
    )
  )

See the configuration XSD and programmatic code generation for more details.

import org.jooq.meta.jaxb.*


configuration {

  // These properties can be added directly to the generator element:
  generator {
    strategy {
      matchers {

        // Specify 0..n table matchers to provide a strategy for naming objects created from UDTs.
        udts {
          udt {

            // Match unqualified or qualified UDT names. If left empty, this matcher applies to all UDTs.
            expression = "MY_UDT"

            // These elements influence the naming of a generated org.jooq.UDT object.
            udtClass = MatcherRule. a MatcherRule specification 
            udtIdentifier = MatcherRule. a MatcherRule specification 
            udtExtends = "com.example.MyOptionalTableBaseType"
            udtImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated org.jooq.UDTPathField object.
            pathClass = MatcherRule. a MatcherRule specification 
            pathExtends = "com.example.MyOptionalTableBaseType"
            pathImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated org.jooq.UDTRecord object.
            recordClass = MatcherRule. a MatcherRule specification 
            recordExtends = "com.example.MyOptionalRecordBaseType"
            recordImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated interface, implemented by
            // generated org.jooq.UDTRecord objects and by generated POJOs.
            interfaceClass = MatcherRule. a MatcherRule specification 
            interfaceImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated POJO object.
            pojoClass = MatcherRule. a MatcherRule specification 
            pojoExtends = "com.example.MyOptionalPojoBaseClass"
            pojoImplements = "com.example.MyOptionalCustomInterface"
          }
        }
      }
    }
  }
}

See the configuration XSD and gradle code generation for more details.

configuration {

  // These properties can be added directly to the generator element:
  generator {
    strategy {
      matchers {

        // Specify 0..n table matchers to provide a strategy for naming objects created from UDTs.
        udts {
          udt {

            // Match unqualified or qualified UDT names. If left empty, this matcher applies to all UDTs.
            expression = "MY_UDT"

            // These elements influence the naming of a generated org.jooq.UDT object.
            udtClass = " a MatcherRule specification "
            udtIdentifier = " a MatcherRule specification "
            udtExtends = "com.example.MyOptionalTableBaseType"
            udtImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated org.jooq.UDTPathField object.
            pathClass = " a MatcherRule specification "
            pathExtends = "com.example.MyOptionalTableBaseType"
            pathImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated org.jooq.UDTRecord object.
            recordClass = " a MatcherRule specification "
            recordExtends = "com.example.MyOptionalRecordBaseType"
            recordImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated interface, implemented by
            // generated org.jooq.UDTRecord objects and by generated POJOs.
            interfaceClass = " a MatcherRule specification "
            interfaceImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated POJO object.
            pojoClass = " a MatcherRule specification "
            pojoExtends = "com.example.MyOptionalPojoBaseClass"
            pojoImplements = "com.example.MyOptionalCustomInterface"
          }
        }
      }
    }
  }
}

See the configuration XSD and gradle code generation for more details.

generationTool {

  // These properties can be added directly to the generator element:
  generator {
    strategy {
      matchers {

        // Specify 0..n table matchers to provide a strategy for naming objects created from UDTs.
        udts {
          udt {

            // Match unqualified or qualified UDT names. If left empty, this matcher applies to all UDTs.
            expression = "MY_UDT"

            // These elements influence the naming of a generated org.jooq.UDT object.
            udtClass = " a MatcherRule specification "
            udtIdentifier = " a MatcherRule specification "
            udtExtends = "com.example.MyOptionalTableBaseType"
            udtImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated org.jooq.UDTPathField object.
            pathClass = " a MatcherRule specification "
            pathExtends = "com.example.MyOptionalTableBaseType"
            pathImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated org.jooq.UDTRecord object.
            recordClass = " a MatcherRule specification "
            recordExtends = "com.example.MyOptionalRecordBaseType"
            recordImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated interface, implemented by
            // generated org.jooq.UDTRecord objects and by generated POJOs.
            interfaceClass = " a MatcherRule specification "
            interfaceImplements = "com.example.MyOptionalCustomInterface"

            // These elements influence the naming of a generated POJO object.
            pojoClass = " a MatcherRule specification "
            pojoExtends = "com.example.MyOptionalPojoBaseClass"
            pojoImplements = "com.example.MyOptionalCustomInterface"
          }
        }
      }
    }
  }
}

See the configuration XSD and gradle code generation for more details.

As always, when regular expressions are used, they are regular expressions with default flags.

When using any udtEtends, recordExtends, etc. setting, you must make sure to correctly implement the internal jOOQ APIs, which are not documented here for they are internal. In particular, if you're extending org.jooq.impl.TableImpl, for example, your custom base class may break between minor versions of jOOQ, as new constructors are added.

See MatcherRule for more information about MatcherRule specifications.

Feedback

Do you have any feedback about this page? We'd love to hear it!

The jOOQ Logo