Usando Querydsl en Spring Data MongoDB

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>

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

 

¿Te pareció interesante? Compártelo:
Share on Facebook
Facebook
Share on Google+
Google+
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Print this page
Print
Email this to someone
email

Sobre el Autor:

Ingeniero Informático que desarrolla su actividad profesional como Arquitecto Software.