Spring Boot Querydsl and Mapstruct - Yash-777/MyWorld GitHub Wiki
Basic query
List<Person> persons = queryFactory.selectFrom(person)
.where(
person.firstName.eq("John"),
person.lastName.eq("Doe"))
.fetch();
Tuple projection
List<Tuple> tuples = queryFactory.select(
person.lastName, person.firstName, person.yearOfBirth)
.from(person)
.fetch();
Example:
interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificationExecutor<Menu>, QuerydslPredicateExecutor<Menu> {
@Autowired EntityManager entityManager;
private void getRecords(Long groupId) {
JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
QMenu qMenu = QMenu.menu;
QMenu companyType = (QMenu) queryFactory.from(qMenu)
.where(qMenu.groupId.eq(groupId)).fetchFirst();
JPAQuery<Menu> qMenuQuery = new JPAQuery<Menu>(entityManager);
QMenu companyType = qMenuQuery.from(qMenu)
.where(qMenu.groupId.eq(groupId)).fetchFirst();
}
Java Build Path - Sources - select following Mapstruct folders
Generated source - target/generated-sources/java
Generated annotations - target/generated-sources/annotations
@Mapper(
componentModel = org.mapstruct.MappingConstants.ComponentModel.SPRING,
unmappedTargetPolicy = org.mapstruct.ReportingPolicy.IGNORE
uses = {BaseMapper.class, GroupMapper.class, MenuMapper.class})
public interface UserMapper {
//@Mapping(target = "password" ,source = "user.password", ignore = true)
@Mapping(target = "version", source = "version", defaultValue = "0")
@Mapping(target = "mailStatus", source = "user.mailStatusFlag")
User entityToModel(com.vorwerk.dspro.entities.User user);
@Mapping(target = "mailStatusFlag", source = "mailStatus")
com.vorwerk.dspro.entities.User modelToEntity(User user);
default Status mapToStatusEnum(int value) { return Status.get(value); }
default Integer mapToInteger(Status status) { return status != null ? status.getId() : null; }
}
Click to expand! (Maven POM.xml build configuration for QueryDSL and MapStruct)
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-apt</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.5.3.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.3.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<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>
<options>
<querydsl.generatedAnnotationClass>javax.annotation.Generated</querydsl.generatedAnnotationClass>
</options>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.5.3.Final</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<compilerArg>
-Amapstruct.defaultComponentModel=spring
</compilerArg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>