Polishing.
Add dynamic projection benchmark.
This commit is contained in:
10
pom.xml
10
pom.xml
@@ -56,17 +56,9 @@
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>jmh</id>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.github.mp911de.microbenchmark-runner</groupId>
|
||||
<artifactId>microbenchmark-runner-junit5</artifactId>
|
||||
<version>0.4.0.RELEASE</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>jitpack.io</id>
|
||||
<id>jitpack</id>
|
||||
<url>https://jitpack.io</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
@@ -42,6 +42,7 @@ import org.openjdk.jmh.annotations.Warmup;
|
||||
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.jpa.benchmark.model.Person;
|
||||
import org.springframework.data.jpa.benchmark.model.PersonDto;
|
||||
import org.springframework.data.jpa.benchmark.model.Profile;
|
||||
import org.springframework.data.jpa.benchmark.repository.PersonRepository;
|
||||
import org.springframework.data.jpa.repository.support.JpaRepositoryFactory;
|
||||
@@ -195,6 +196,12 @@ public class RepositoryQueryMethodBenchmarks {
|
||||
Sort.by(COLUMN_PERSON_FIRSTNAME));
|
||||
}
|
||||
|
||||
@Benchmark
|
||||
public List<PersonDto> stringBasedQueryDynamicSortAndProjection(BenchmarkParameters parameters) {
|
||||
return parameters.repositoryProxy.findAllWithAnnotatedQueryByFirstname(PERSON_FIRSTNAME,
|
||||
Sort.by(COLUMN_PERSON_FIRSTNAME), PersonDto.class);
|
||||
}
|
||||
|
||||
@Benchmark
|
||||
public List<Person> stringBasedNativeQuery(BenchmarkParameters parameters) {
|
||||
return parameters.repositoryProxy.findAllWithNativeQueryByFirstname(PERSON_FIRSTNAME);
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.springframework.data.jpa.benchmark.model;
|
||||
|
||||
/**
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
public record PersonDto(String firstname, String lastname) {
|
||||
}
|
||||
@@ -38,6 +38,9 @@ public interface PersonRepository extends ListCrudRepository<Person, Integer> {
|
||||
@Query("SELECT p FROM org.springframework.data.jpa.benchmark.model.Person p WHERE p.firstname = ?1")
|
||||
List<Person> findAllWithAnnotatedQueryByFirstname(String firstname, Sort sort);
|
||||
|
||||
@Query("SELECT p FROM org.springframework.data.jpa.benchmark.model.Person p WHERE p.firstname = ?1")
|
||||
<T> List<T> findAllWithAnnotatedQueryByFirstname(String firstname, Sort sort, Class<T> projection);
|
||||
|
||||
@Query(value = "SELECT * FROM person WHERE firstname = ?1", nativeQuery = true)
|
||||
List<Person> findAllWithNativeQueryByFirstname(String firstname);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user