package io.robe.hibernate.criteria; import io.robe.hibernate.BenchMark; import io.robe.hibernate.HibernateUtil; import io.robe.hibernate.criteria.api.Criteria; import io.robe.hibernate.criteria.hql.TransformerImpl; import io.robe.hibernate.test.entity.Role; import io.robe.hibernate.test.entity.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; /** * Created by kamilbukum on 24/01/2017. */ public class QueryBenchmark { protected static SessionFactory sessionFactory; //@BeforeClass public static void beforeClass(){ if(sessionFactory == null) { sessionFactory = HibernateUtil.getSessionFactory(QueryBenchmark.class); Session session = sessionFactory.openSession(); Set<String> nickNames = new LinkedHashSet<>(); nickNames.add("Example"); for(int i = 0 ; i < 1000; i++) { session.getTransaction().begin(); Role role = new Role("TestRole_" + i, "Example First Role"); session.persist(role); session.persist(new User( "test" + i + "@robe.io", "Kamil", "Bukum", "35345435345345", true, 10, new Date(), new Date(), role.getOid(), "Transient Value", nickNames )); session.getTransaction().commit(); } } } // @Test public void benchmark(){ System.out.println("HQL & ROBE CRITERIA Benchmarks started..."); // HQL Example System.out.println("***** HIBERNATE HQL *******"); Session session = sessionFactory.openSession(); long startMilliSecond = System.currentTimeMillis(); String hql = "SELECT user from io.robe.hibernate.test.entity.User user"; List<User> userList = session.createQuery(hql).list(); System.out.println(userList.size()); long endMilliSecond = System.currentTimeMillis(); System.out.println("Milli Second ! -> : " + (endMilliSecond - startMilliSecond)); // Criteria Example System.out.println("***** ROBE CRITERIA *******"); session = sessionFactory.openSession(); startMilliSecond = System.currentTimeMillis(); userList = Criteria.createCriteria(User.class, new TransformerImpl<User>(session)).list(); System.out.println(userList.size()); endMilliSecond = System.currentTimeMillis(); System.out.println("Milli Second ! -> : " + (endMilliSecond - startMilliSecond)); // HQL Example System.out.println("***** HIBERNATE HQL *******"); session = sessionFactory.openSession(); startMilliSecond = System.currentTimeMillis(); hql = "SELECT user from io.robe.hibernate.test.entity.User user"; userList = session.createQuery(hql).list(); System.out.println(userList.size()); endMilliSecond = System.currentTimeMillis(); System.out.println("Milli Second ! -> : " + (endMilliSecond - startMilliSecond)); // Criteria Example System.out.println("***** ROBE CRITERIA *******"); session = sessionFactory.openSession(); startMilliSecond = System.currentTimeMillis(); userList = Criteria.createCriteria(User.class, new TransformerImpl<User>(session)).list(); System.out.println(userList.size()); endMilliSecond = System.currentTimeMillis(); System.out.println("Milli Second ! -> : " + (endMilliSecond - startMilliSecond)); // HQL Example System.out.println("***** HIBERNATE HQL *******"); session = sessionFactory.openSession(); startMilliSecond = System.currentTimeMillis(); hql = "SELECT user from io.robe.hibernate.test.entity.User user"; userList = session.createQuery(hql).list(); System.out.println(userList.size()); endMilliSecond = System.currentTimeMillis(); System.out.println("Milli Second ! -> : " + (endMilliSecond - startMilliSecond)); // Criteria Example System.out.println("***** ROBE CRITERIA *******"); session = sessionFactory.openSession(); startMilliSecond = System.currentTimeMillis(); userList = Criteria.createCriteria(User.class, new TransformerImpl<User>(session)).list(); System.out.println(userList.size()); endMilliSecond = System.currentTimeMillis(); System.out.println("Milli Second ! -> : " + (endMilliSecond - startMilliSecond)); } private static void benchMarkHqlJoin(int benchmarkCount){ BenchMark.bench("HIBERNATE HQL", benchmarkCount, ()-> { Session session = sessionFactory.openSession(); String hql = "SELECT user from io.robe.hibernate.test.entity.User user" + "\nLEFT OUTER JOIN io.robe.hibernate.test.entity.Role role" + "\nON user.roleOid=role.oid"; List<User> userList = session.createQuery(hql).list(); System.out.println(userList.size()); }); } private static void benchMarkRobeCriteriaJoin(int benchmarkCount){ BenchMark.bench("ROBE CRITERIA", benchmarkCount, ()-> { Session session = sessionFactory.openSession(); List<User> userList = Criteria.createCriteria(User.class, new TransformerImpl<User>(session)) .createJoin(Role.class, "roleOid").getRoot().list(); System.out.println(userList.size()); }); } // @Test public void benchmark2(){ String hql = "SELECT user from io.robe.hibernate.test.entity.User user"; Session session = sessionFactory.openSession(); List<User> userList = session.createQuery(hql).list(); int benchmarkCount = 10; benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); benchMarkHqlJoin(benchmarkCount); benchMarkRobeCriteriaJoin(benchmarkCount); } }