¡Compártelo!

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
 

Artículos relacionados

observabilidad con Spring Boot 3

Spring boot 3.0: Observabilidad a un nuevo nivel

Con la llegada de la nueva versión de Spring boot se ha introducido una nueva manera de entender la observabilidad de un aplicativo de modo que podamos tener un mayor control sobre lo que sucede dentro de él, minimizando el número de dependencias a usar

AsyncAPI

AsyncAPI: Diseñar APIs asíncronas

En este post descubrimos cómo AsyncAPI revoluciona la comunicación entre sistemas al permitir operaciones no secuenciales, mejorando el rendimiento y la escalabilidad de las aplicaciones web. Exploraremos sus características y ejemplos prácticos para comprender su impacto en el desarrollo de aplicaciones. Qué es AsyncAPI AsyncAPI

¿Qué es Node.js? Introducción al JavaScript en el lado del servidor

Node.js Es una tecnología muy popular y ampliamente utilizada en el mundo del desarrollo web por ser en una excelente opción para aplicaciones web en tiempo real, juegos y aplicaciones de streaming. En este post, exploraremos qué es Node.js, por qué es importante y cómo