Spring Data nos ofrece distintas formas de ejecutar sentencias contra nuestra base de datos:
- Mediante nombre de función en la interfaz de repositorio.
- Uso de @Query
- MongoOperations
- Criteria
- Usando la sintaxis tal cual de la mongo shell
- Query By Example
- …
En este post nos vamos a centrar en la extensión Querydsl ampliando el código de la receta básica de Pivotal para MongoDB «Accessing Data with MongoDB»
1: pom.xml
Añadimos dependencia y configuramos plugin para generar las clases Q* (apt.version vale 1.1.3):
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-mongodb</artifactId>
<exclusions>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</exclusion>
</exclusions>
</dependency>
...
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>${apt.version}</version>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/annotations</outputDirectory>
<processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
<logOnlyOnError>true</logOnlyOnError>
</configuration>
</execution
</executions>
</plugin>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-mongodb</artifactId>
<exclusions>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</exclusion>
</exclusions>
</dependency>
...
<plugin>
<groupId>com.mysema.maven</groupId>
<artifactId>apt-maven-plugin</artifactId>
<version>${apt.version}</version>
<dependencies>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
<version>${querydsl.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>process</goal>
</goals>
<configuration>
<outputDirectory>target/generated-sources/annotations</outputDirectory>
<processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
<logOnlyOnError>true</logOnlyOnError>
</configuration>
</execution
</executions>
</plugin>
2: Documento
Anotamos la clase Customer con @Document
3: Repositorio
Hacemos que la interfaz CustomerRepository herede también de QueryDslPredicateExecutor<Customer>
4: Uso de Querydsl
// fetch an individual customer System.out.println("Customer found with findByFirstName('Alice') with querydsl:"); System.out.println("--------------------------------"); QCustomer qCustomer = QCustomer.customer; Predicate predicate = qCustomer.firstName.eq("Alice"); System.out.println(repository.findAll(predicate)); System.out.println();
Todo el código fuente está disponible en: https://github.com/venosov/gs-accessing-data-mongodb/commit/770df5f70853e9fe14bf4ada9c3c31eb5d4a4c8f