Skip to content

Instantly share code, notes, and snippets.

@renatoapcosta
Last active May 6, 2019 15:44
Show Gist options
  • Save renatoapcosta/38907e3dd2d87a402b116103fddd321b to your computer and use it in GitHub Desktop.
Save renatoapcosta/38907e3dd2d87a402b116103fddd321b to your computer and use it in GitHub Desktop.
QueryDSL

QueryDSL

Dependencia Maven

No Spring Boot 1.XX e 2.0.1 é importado a versão 4.1.4

No spring Boot 2.XX é importado a versão 4.2.1

<dependency>
	<groupId>com.querydsl</groupId>
	<artifactId>querydsl-apt</artifactId>
</dependency>

<dependency>
	<groupId>com.querydsl</groupId>
	<artifactId>querydsl-jpa</artifactId>
</dependency>

Adicionar Plugin

Spring Boot 1.XX

<plugin>
	<groupId>com.mysema.maven</groupId>
	<artifactId>apt-maven-plugin</artifactId>
	<version>1.1.3</version>
	<executions>
		<execution>
			<phase>generate-sources</phase>
			<goals>
				<goal>process</goal>
			</goals>
			<configuration>
				<outputDirectory>target/generated-sources/java</outputDirectory>
				<processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
			</configuration>
		</execution>
	</executions>
</plugin>

Spring Boot 2.XX

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

Compilar

mvn install

mvn generated-sources

No Spring Boot 2.XX somente:

mvn compile

Na IDE STS

STS.ini adicionar antes de -vmargs

-vm
C:/Program Files/Java/jdk1.8.0_171/bin/javaw.exe

Exemplo do arquivo STS.ini

-startup
plugins/org.eclipse.equinox.launcher_1.5.0.v20180512-1130.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.700.v20180518-1200
-product
org.springsource.sts.ide
--launcher.defaultAction
openFile
-vm
C:/Program Files/Java/jdk1.8.0_171/bin/javaw.exe
-vmargs
-Dosgi.requiredJavaVersion=1.8
--add-modules=ALL-SYSTEM
-Xms40m
-Dosgi.module.lock.timeout=10
-Dorg.eclipse.swt.browser.IEVersion=10001
-Xmx1200m
-javaagent:C:\app\sts-bundle\sts-3.9.5.RELEASE\lombok.jar

Importante

Na versão 4.2.1 a classe QueryDslPredicateExecutor foi alterada para QuerydslPredicateExecutor

org.springframework.data.querydsl.QueryDslPredicateExecutor

org.springframework.data.querydsl.QuerydslPredicateExecutor

Referencia https://www.logicbig.com/tutorials/spring-framework/spring-data/query-dsl-basic.html

Exemplo de uso

Exemplo 1

import com.querydsl.core.types.dsl.BooleanExpression;
public class LoteCotacaoPredicate {
    private static final QLoteCotacao rlc = QLoteCotacao.loteCotacao;
    public static BooleanExpression byCodStatus(Integer codStatus) {
        return rlc.tipoStatus.codTipoStatus.eq(codStatus);
    }	
}

@Repository
public interface LoteCotacaoRepository
        extends CrudRepository<LoteCotacao, Long>, QuerydslPredicateExecutor<LoteCotacao> {
}

public class LoteCotacaoService{

    @Autowired
    private LoteCotacaoRepository loteCotacaoRepository;

    @Override
    public void buscar()  {
        Iterable<LoteCotacao> lotes = loteCotacaoRepository.findAll(LoteCotacaoPredicate.byCodStatus(2));
    }
}

Exemplo 2

import com.querydsl.core.types.dsl.BooleanExpression;
public interface DespesaItemRepositoryCustom {
	DespesaItem findDescItem(BooleanExpression predicate);
}

@Repository
@RequiredArgsConstructor
public class DespesaItemRepositoryImpl implements DespesaItemRepositoryCustom {

	private static final QDespesaItem rdi = QDespesaItem.despesaItem;
	private final EntityManager em;

	@Override
	public DespesaItem findDescItem(BooleanExpression predicate) {
		JPAQuery<Void> query = new JPAQuery<>(em);
		return query.select(Projections.fields(ReembDespesaItem.class,rdi.qtdItem))
			.from(rdi)
			.where(predicate)
			.orderBy(rdi.codDespesaItem.desc())
			.fetchFirst();
	}
}

@Repository
public interface DespesaItemRepository extends CrudRepository<DespesaItem, Long>,
		QuerydslPredicateExecutor<DespesaItem>, DespesaItemRepositoryCustom {	}

@Service
public class DespesaServiceImpl {
   	
	private final DespesaItemRepository despesaItemRepository;
	
	public void busca(){
		DespesaItem itensPorNumItem = despesaItemRepository.findDescItem(DespesaItemPredicate.byNumItemAndCodDespesa(item.getNumItem(), item.getDespesa().getCodDespesa(),1));
	}
	
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment