QueryDSL верблюжий кейс со змеей без jpa / hibernate - PullRequest
0 голосов
/ 30 января 2020

Попробуйте найти способ составления SQL запроса со столбцами в случае змеи. Затем SQL запрос предоставит Spring Data R2DB C DatabaseClient executor в виде простого текста. Я не использую модули jpa / hibernate, jdo или mon go.

Как я могу преобразовать имена столбцов в случай змеи? Может быть, есть какая-то конфигурация или что-то можно переопределить, чтобы сделать этот трюк. Поскольку, кроме метода регулярных выражений, для проверки всего составного SQL запроса в виде простого текста в верхнем регистре символов для преобразования его в добавление подчеркивания впереди, у меня больше нет идей, как это сделать.

build.gradle:

plugins {
    id 'idea'
    id 'java'
    id 'org.springframework.boot' version '2.2.1.RELEASE'
}

apply plugin: 'io.spring.dependency-management'

ext {
    queryDslVersion = '4.2.2'
    javaxAnnotationVersion = '1.3.2'
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-webflux')

    compile("com.querydsl:querydsl-sql:${queryDslVersion}")

    compileOnly('org.projectlombok:lombok')

    annotationProcessor('org.projectlombok:lombok')
    annotationProcessor("com.querydsl:querydsl-apt:${queryDslVersion}:general")
    annotationProcessor("javax.annotation:javax.annotation-api:${javaxAnnotationVersion}")

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    testImplementation('io.projectreactor:reactor-test')
}

idea {
    module {
        sourceDirs += file('generated/')
        generatedSourceDirs += file('generated/')
    }
}

запрос:

 public Flux<Foo> findByCollectionQuery(FooCollectionQuery collectionQuery) {
        var foo = QFoo.foo;
        var bar = QBar.bar;
        var predicates = new BooleanBuilder();

        var query = new PostgreSQLQuery<>(null);
        query.select(foo, bar.someProperty)
             .from(foo)
             .leftJoin(bar).on(bar.id.eq(foo.barId));

        collectionQuery.getFooId().ifPresent(fooId -> predicates.and(foo.fooId.eq(fooId)));
        ...

        query.where(predicates).orderBy(payment.created.desc())
             .offset(collectionQuery.getPageable().getOffset())
             .limit(collectionQuery.getPageable().getPageSize());

        return this.client.execute(query.getSQL().getSQL())
                          .as(Foo.class)
                          .fetch()
                          .all();
    }
...