package com.querydsl.jpa;
import static org.junit.Assert.assertNotNull;
import javax.persistence.EntityManager;
import org.junit.*;
import org.junit.experimental.categories.Category;
import org.junit.runner.RunWith;
import com.querydsl.core.Target;
import com.querydsl.core.Tuple;
import com.querydsl.core.testutil.Performance;
import com.querydsl.jpa.domain.Cat;
import com.querydsl.jpa.domain.QCat;
import com.querydsl.jpa.impl.JPAQuery;
import com.querydsl.jpa.testutil.JPATestRunner;
@RunWith(JPATestRunner.class)
@Ignore
@Category(Performance.class)
public class QueryPerformanceTest implements JPATest {
private static final int iterations = 1000;
private EntityManager entityManager;
@BeforeClass
public static void setUpClass() {
Mode.mode.set("h2perf");
Mode.target.set(Target.H2);
}
@AfterClass
public static void tearDownClass() {
Mode.mode.remove();
Mode.target.remove();
}
private JPAQuery<?> query() {
return new JPAQuery<Void>(entityManager);
}
@Before
public void setUp() {
if (query().from(QCat.cat).fetchCount() == 0) {
for (int i = 0; i < iterations; i++) {
entityManager.persist(new Cat(String.valueOf(i), i + 100));
}
entityManager.flush();
}
}
@Test
public void byId_raw() {
long start = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
Cat cat = (Cat) entityManager.createQuery("select cat from Cat cat where id = ?")
.setParameter(1, i + 100).getSingleResult();
assertNotNull(cat);
}
System.err.println("by id - raw" + (System.currentTimeMillis() - start));
}
@Test
public void byId_qdsl() {
long start = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
QCat cat = QCat.cat;
Cat c = query().from(cat).where(cat.id.eq(i + 100)).select(cat).fetchOne();
assertNotNull(c);
}
System.err.println("by id - dsl" + (System.currentTimeMillis() - start));
}
@Test
public void byId_twoCols_raw() {
long start = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
Object[] row = (Object[]) entityManager.createQuery(
"select cat.id, cat.name from Cat cat where id = ?")
.setParameter(1, i + 100).getSingleResult();
assertNotNull(row);
}
System.err.println("by id - 2 cols - raw" + (System.currentTimeMillis() - start));
}
@Test
public void byId_twoCols_qdsl() {
long start = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
QCat cat = QCat.cat;
Tuple row = query().from(cat).where(cat.id.eq(i + 100)).select(cat.id, cat.name).fetchOne();
assertNotNull(row);
}
System.err.println("by id - 2 cols - dsl" + (System.currentTimeMillis() - start));
}
@Override
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
}