복붙노트

[SPRING] Spring 데이터 MongoDB 저장소 - JPA 스펙

SPRING

Spring 데이터 MongoDB 저장소 - JPA 스펙

스프링 데이터 MongoDB 저장소를위한 JPA 스펙과 같은 것이 있습니까?

그렇지 않은 경우 리포지토리를 사용하여 동적 쿼리를 만들려면 어떻게해야합니까?

클래식 시나리오는 사용자가 채울 선택적 필드가있는 검색 양식이 될 수 있습니다.

해결법

  1. ==============================

    1.나는 나 자신을 발견했다.

    나는 나 자신을 발견했다.

    트릭은 다음과 같은 방법으로 QueryDSL을 사용하여 수행 할 수 있습니다.

    먼저 QueryDSL 종속성을 추가하십시오.

    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-mongodb</artifactId>
        <version>${querydsl-mongo.version}</version>
    </dependency>
    
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
        <version>${querydsl-mongo.version}</version>
    </dependency>
    

    그런 다음 Metamodels 클래스를 만들려면 플러그인을 구성하십시오 (이름은 접두어로 Q 문자가있는 문서와 동일합니다 : 예 : QUser).

        <build>
            <plugins>
                ....
                <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>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    프로세서 클래스에 주목하십시오 : QueryDSL 디폴트 코드는 com.mysema.query.apt.morphia.MorphiaAnnotationProcessor가 아니라 Spring 데이터 MongoDB 중 하나입니다 org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor :

    이제 저장소 인터페이스를 QueryDslPredicateExecutor 로 확장 할 수 있습니다.

    public interface UserRepository extends MongoRepository<User, String>, QueryDslPredicateExecutor<User>,
            QuerydslBinderCustomizer<QUser> {
    }
    

    이제 저장소를 질의 할 때 술어를 정의 할 수 있습니다.

    QUser user = QUser.user;            
    BooleanExpression predicate = user.name.containsIgnoreCase("John");         
    userRepository.findAll(predicate);
    

    QuerydslBinderCustomizer는 문서 속성의 바인딩을 정의하는 데 도움을줍니다 (추가 도움말은 Spring 설명서 참조).

  2. ==============================

    2.다음 시점에 업데이트됩니다 :

    다음 시점에 업데이트됩니다 :

    <spring.version>4.3.4.RELEASE</spring.version>
    <querydsl.version>4.1.3</querydsl.version>
    <spring.data.mongodb.version>1.9.5</spring.data.mongodb.version>
    

    용도

    ...
                <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>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    ...
    
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-mongodb</artifactId>
            <version>${querydsl.version}</version>
        </dependency>
    
        <dependency>
            <groupId>com.querydsl</groupId>
            <artifactId>querydsl-apt</artifactId>
            <version>${querydsl.version}</version>
        </dependency>
    
  3. from https://stackoverflow.com/questions/33735797/spring-data-mongodb-repository-jpa-specifications-like by cc-by-sa and MIT license