Spring CRUDRepository findBy Несколько полей - PullRequest
1 голос
/ 27 марта 2019

, если мой EmployeeEntity содержит несколько полей:

first_name
last_name
department
office_name
state,
etc..

есть ли способ, с помощью которого JUST ONE найти интерфейс ... () в моем интерфейсе CRUDRepository для поиска сотрудников на основепараметры запроса без жесткого кода интерфейса?

http://localhost:8080/employees?last_name='me'&state='tx'

или

http://localhost:8080/employee?state='tx'&office_name='alpha'

1 Ответ

1 голос
/ 27 марта 2019

Вы можете использовать QueryDSL для динамической генерации любых запросов в вашем хранилище на основе полей вашей сущности.

Чтобы интегрировать его с Spring Data JPA, добавьте в проект следующие две зависимости и процессор аннотаций JPA:

<dependency> 
    <groupId>com.querydsl</groupId> 
    <artifactId>querydsl-apt</artifactId> 
    <version>4.1.4</version>
    </dependency>
<dependency> 
    <groupId>com.querydsl</groupId> 
    <artifactId>querydsl-jpa</artifactId> 
    <version>4.1.4</version> 
</dependency>

<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>
                <processor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</processor>
            </configuration>
        </execution>
    </executions>
</plugin>

… и расширьте свой репозиторий таким образом:

public interface EmployeeRepository extends JpaRepository<EmployeeEntity, Long>, 
  QuerydslPredicateExecutor<EmployeeEntity>, QuerydslBinderCustomizer<QEmployeeEntity> {
}

Теперь вы можете выражать все виды комбинаций запросов:

BooleanExpression name = QEmployeeEntity.employeeEntity.last_name.eq("brawn");
BooleanExpression stateAndName = QEmployeeEntity.employeeEntity.state.eq("tx").and(name);

Обратитесь также к справочному руководству JPA Spring Data для получения дополнительной информации.

...