CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/maven-com-mysema-querydsl--querydsl-apt

APT-based source code generation tool for Querydsl that generates type-safe query classes from annotated Java entity classes.

Pending
Overview
Eval results
Files

processing-options.mddocs/

Processing Options

APT compiler options for controlling code generation behavior, naming conventions, and processing rules. These options are passed to annotation processors via build tool configuration (Maven, Gradle) or IDE settings.

Capabilities

APT Options Constants

Central constants defining all supported annotation processing options.

/**
 * APT options supported by Querydsl annotation processors
 */
public final class APTOptions {
    
    // Naming configuration
    public static final String QUERYDSL_PREFIX = "querydsl.prefix";
    public static final String QUERYDSL_SUFFIX = "querydsl.suffix"; 
    public static final String QUERYDSL_PACKAGE_SUFFIX = "querydsl.packageSuffix";
    
    // Code generation options
    public static final String QUERYDSL_CREATE_DEFAULT_VARIABLE = "querydsl.createDefaultVariable";
    public static final String QUERYDSL_ENTITY_ACCESSORS = "querydsl.entityAccessors";
    public static final String QUERYDSL_LIST_ACCESSORS = "querydsl.listAccessors";
    public static final String QUERYDSL_MAP_ACCESSORS = "querydsl.mapAccessors";
    
    // Property discovery options
    public static final String QUERYDSL_USE_FIELDS = "querydsl.useFields";
    public static final String QUERYDSL_USE_GETTERS = "querydsl.useGetters";
    public static final String QUERYDSL_UNKNOWN_AS_EMBEDDABLE = "querydsl.unknownAsEmbeddable";
    
    // Inclusion/exclusion options
    public static final String QUERYDSL_EXCLUDED_PACKAGES = "querydsl.excludedPackages";
    public static final String QUERYDSL_EXCLUDED_CLASSES = "querydsl.excludedClasses";
    public static final String QUERYDSL_INCLUDED_PACKAGES = "querydsl.includedPackages";
    public static final String QUERYDSL_INCLUDED_CLASSES = "querydsl.includedClasses";
    
    // Advanced configuration
    public static final String QUERYDSL_VARIABLE_NAME_FUNCTION_CLASS = "querydsl.variableNameFunctionClass";
}

Naming Configuration Options

Control the naming conventions for generated query classes and their components.

// Class name prefix (default: empty string)
public static final String QUERYDSL_PREFIX = "querydsl.prefix";

// Class name suffix (default: "Q")  
public static final String QUERYDSL_SUFFIX = "querydsl.suffix";

// Package suffix for generated classes (default: empty)
public static final String QUERYDSL_PACKAGE_SUFFIX = "querydsl.packageSuffix";

Usage Examples:

<!-- Maven APT plugin configuration -->
<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <configuration>
        <options>
            <!-- Generate QUser, QProduct, etc. (default) -->
            <querydsl.prefix></querydsl.prefix>
            <querydsl.suffix>Q</querydsl.suffix>
            
            <!-- Alternative: Generate QueryUser, QueryProduct -->
            <querydsl.prefix>Query</querydsl.prefix>
            <querydsl.suffix></querydsl.suffix>
            
            <!-- Put generated classes in separate package -->
            <querydsl.packageSuffix>.query</querydsl.packageSuffix>
        </options>
    </configuration>
</plugin>

Naming Results:

  • Default (prefix="", suffix="Q"): UserQUser
  • Query prefix (prefix="Query", suffix=""): UserQueryUser
  • Package suffix: com.example.model.Usercom.example.model.query.QUser

Code Generation Options

Control the structure and features of generated query classes.

// Create static default variable instances (default: true)
public static final String QUERYDSL_CREATE_DEFAULT_VARIABLE = "querydsl.createDefaultVariable";

// Generate entity accessor methods (default: false)
public static final String QUERYDSL_ENTITY_ACCESSORS = "querydsl.entityAccessors";

// Generate list-specific accessor methods (default: false)  
public static final String QUERYDSL_LIST_ACCESSORS = "querydsl.listAccessors";

// Generate map-specific accessor methods (default: false)
public static final String QUERYDSL_MAP_ACCESSORS = "querydsl.mapAccessors";

Code Generation Examples:

// With QUERYDSL_CREATE_DEFAULT_VARIABLE=true (default)
public class QUser extends EntityPathBase<User> {
    public static final QUser user = new QUser("user"); // Default variable created
    // ... properties
}

// With QUERYDSL_CREATE_DEFAULT_VARIABLE=false  
public class QUser extends EntityPathBase<User> {
    // No static default variable
    public QUser(String variable) { super(User.class, variable); }
    // ... properties
}

// With QUERYDSL_ENTITY_ACCESSORS=true
public class QUser extends EntityPathBase<User> {
    // Standard properties
    public final StringPath name = createString("name");
    public final ListPath<Order, QOrder> orders = this.<Order, QOrder>createList("orders", Order.class, QOrder.class, PathInits.DIRECT2);
    
    // Additional entity accessor methods generated
    public QOrder orders() { return new QOrder(forProperty("orders")); }
    public QOrder orders(int index) { return new QOrder(forProperty("orders", index)); }
}

Property Discovery Options

Configure how annotation processors discover entity properties from source code.

// Process field declarations (default: true)
public static final String QUERYDSL_USE_FIELDS = "querydsl.useFields";

// Process getter methods (default: true)
public static final String QUERYDSL_USE_GETTERS = "querydsl.useGetters";

// Treat unknown referenced types as embeddable (default: false)
public static final String QUERYDSL_UNKNOWN_AS_EMBEDDABLE = "querydsl.unknownAsEmbeddable";

Property Discovery Modes:

<!-- Process both fields and getters (default) -->
<querydsl.useFields>true</querydsl.useFields>
<querydsl.useGetters>true</querydsl.useGetters>

<!-- Fields only (ignore getter methods) -->
<querydsl.useFields>true</querydsl.useFields>
<querydsl.useGetters>false</querydsl.useGetters>

<!-- Getters only (ignore field declarations) -->
<querydsl.useFields>false</querydsl.useFields>
<querydsl.useGetters>true</querydsl.useGetters>

Unknown Type Handling:

@Entity
public class User {
    private CustomType customProperty; // Unknown type
}

// With QUERYDSL_UNKNOWN_AS_EMBEDDABLE=false (default)
// CustomType ignored unless explicitly annotated

// With QUERYDSL_UNKNOWN_AS_EMBEDDABLE=true  
// CustomType treated as embeddable, QCustomType generated if possible

Inclusion and Exclusion Options

Fine-grained control over which packages and classes are processed.

// Comma-separated list of packages to exclude from processing
public static final String QUERYDSL_EXCLUDED_PACKAGES = "querydsl.excludedPackages";

// Comma-separated list of classes to exclude from processing
public static final String QUERYDSL_EXCLUDED_CLASSES = "querydsl.excludedClasses";

// Comma-separated list of packages to include (whitelist mode)
public static final String QUERYDSL_INCLUDED_PACKAGES = "querydsl.includedPackages";

// Comma-separated list of classes to include (whitelist mode)  
public static final String QUERYDSL_INCLUDED_CLASSES = "querydsl.includedClasses";

Exclusion Examples:

<!-- Exclude specific packages -->
<querydsl.excludedPackages>com.example.internal,com.example.test</querydsl.excludedPackages>

<!-- Exclude specific classes -->
<querydsl.excludedClasses>com.example.TempEntity,com.example.DebugEntity</querydsl.excludedClasses>

<!-- Whitelist mode - only process specified packages -->
<querydsl.includedPackages>com.example.model,com.example.domain</querydsl.includedPackages>

<!-- Whitelist mode - only process specified classes -->
<querydsl.includedClasses>com.example.User,com.example.Product</querydsl.includedClasses>

Processing Rules:

  1. Inclusion Priority: If included packages/classes are specified, only those are processed
  2. Exclusion Filtering: Excluded packages/classes are removed from processing
  3. Package Matching: Uses startsWith() matching for package exclusions
  4. Class Matching: Uses exact string matching for class exclusions

Advanced Configuration Options

Specialized options for advanced customization scenarios.

// Custom variable name function class (default: DefaultVariableNameFunction)
public static final String QUERYDSL_VARIABLE_NAME_FUNCTION_CLASS = "querydsl.variableNameFunctionClass";

Custom Variable Naming:

// Implement custom variable naming strategy
public class CustomVariableNameFunction implements Function<EntityType, String> {
    @Override
    public String apply(EntityType entityType) {
        String className = entityType.getSimpleName();
        // Convert PascalCase to camelCase and make plural
        return className.substring(0, 1).toLowerCase() + 
               className.substring(1) + "s";
    }
}

// Configuration
<querydsl.variableNameFunctionClass>com.example.CustomVariableNameFunction</querydsl.variableNameFunctionClass>

// Result: User entity gets variable name "users" instead of "user"
public static final QUser users = new QUser("users");

Build Tool Integration Examples

Maven Integration:

<plugin>
    <groupId>com.mysema.maven</groupId>
    <artifactId>apt-maven-plugin</artifactId>
    <version>1.1.3</version>
    <executions>
        <execution>
            <goals>
                <goal>process</goal>
            </goals>
            <configuration>
                <outputDirectory>target/generated-sources/java</outputDirectory>
                <processors>
                    <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
                </processors>
                <options>
                    <querydsl.suffix>Q</querydsl.suffix>
                    <querydsl.packageSuffix>.query</querydsl.packageSuffix>
                    <querydsl.useFields>true</querydsl.useFields>
                    <querydsl.useGetters>false</querydsl.useGetters>
                    <querydsl.excludedPackages>com.example.internal</querydsl.excludedPackages>
                </options>
            </configuration>
        </execution>
    </executions>
</plugin>

Gradle Integration:

compileJava {
    options.annotationProcessorPath = configurations.annotationProcessor
    options.compilerArgs += [
        '-Aquerydsl.suffix=Q',
        '-Aquerydsl.packageSuffix=.query', 
        '-Aquerydsl.useFields=true',
        '-Aquerydsl.useGetters=false'
    ]
}

IDE Integration: Most IDEs automatically discover and apply annotation processor options from build configuration. For manual IDE configuration, add the options to the annotation processing settings using the -A prefix (e.g., -Aquerydsl.suffix=Q).

Install with Tessl CLI

npx tessl i tessl/maven-com-mysema-querydsl--querydsl-apt

docs

configuration.md

core-processing.md

framework-processors.md

index.md

processing-options.md

tile.json