move and upgrade hibernate criteria

This commit is contained in:
DOHA
2018-08-15 16:00:09 +03:00
parent 489a26d429
commit 1e11dea206
13 changed files with 470 additions and 278 deletions

View File

@@ -1,19 +0,0 @@
package com.baeldung.hibernate.criteria.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
@SuppressWarnings("deprecation")
public static Session getHibernateSession() {
final SessionFactory sf = new Configuration().configure("criteria.cfg.xml").buildSessionFactory();
// factory = new Configuration().configure().buildSessionFactory();
final Session session = sf.openSession();
return session;
}
}

View File

@@ -1,251 +0,0 @@
/**
* ApplicationViewer is the class that starts the application
* First it creates the session object and then creates the
* criteria query.
*
* @author Pritam Banerjee
* @version 1.0
* @since 07/20/2016
*/
package com.baeldung.hibernate.criteria.view;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.LogicalExpression;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import com.baeldung.hibernate.criteria.model.Item;
import com.baeldung.hibernate.criteria.util.HibernateUtil;
public class ApplicationView {
// default Constructor
public ApplicationView() {
}
public boolean checkIfCriteriaTimeLower() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
Transaction tx = null;
// calculate the time taken by criteria
final long startTimeCriteria = System.nanoTime();
cr.add(Restrictions.like("itemName", "%item One%"));
final List results = cr.list();
final long endTimeCriteria = System.nanoTime();
final long durationCriteria = (endTimeCriteria - startTimeCriteria) / 1000;
// calculate the time taken by HQL
final long startTimeHQL = System.nanoTime();
tx = session.beginTransaction();
final List items = session.createQuery("FROM Item where itemName like '%item One%'").list();
final long endTimeHQL = System.nanoTime();
final long durationHQL = (endTimeHQL - startTimeHQL) / 1000;
if (durationCriteria > durationHQL) {
return false;
} else {
return true;
}
}
// To get items having price more than 1000
public String[] greaterThanCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
cr.add(Restrictions.gt("itemPrice", 1000));
final List<Item> greaterThanItemsList = cr.list();
final String greaterThanItems[] = new String[greaterThanItemsList.size()];
for (int i = 0; i < greaterThanItemsList.size(); i++) {
greaterThanItems[i] = greaterThanItemsList.get(i).getItemName();
}
session.close();
return greaterThanItems;
}
// To get items having price less than 1000
public String[] lessThanCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
cr.add(Restrictions.lt("itemPrice", 1000));
final List<Item> lessThanItemsList = cr.list();
final String lessThanItems[] = new String[lessThanItemsList.size()];
for (int i = 0; i < lessThanItemsList.size(); i++) {
lessThanItems[i] = lessThanItemsList.get(i).getItemName();
}
session.close();
return lessThanItems;
}
// To get items whose Name start with Chair
public String[] likeCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
cr.add(Restrictions.like("itemName", "%chair%"));
final List<Item> likeItemsList = cr.list();
final String likeItems[] = new String[likeItemsList.size()];
for (int i = 0; i < likeItemsList.size(); i++) {
likeItems[i] = likeItemsList.get(i).getItemName();
}
session.close();
return likeItems;
}
// Case sensitive search
public String[] likeCaseCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
cr.add(Restrictions.ilike("itemName", "%Chair%"));
final List<Item> ilikeItemsList = cr.list();
final String ilikeItems[] = new String[ilikeItemsList.size()];
for (int i = 0; i < ilikeItemsList.size(); i++) {
ilikeItems[i] = ilikeItemsList.get(i).getItemName();
}
session.close();
return ilikeItems;
}
// To get records having itemPrice in between 100 and 200
public String[] betweenCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
// To get items having price more than 1000
cr.add(Restrictions.between("itemPrice", 100, 200));
final List<Item> betweenItemsList = cr.list();
final String betweenItems[] = new String[betweenItemsList.size()];
for (int i = 0; i < betweenItemsList.size(); i++) {
betweenItems[i] = betweenItemsList.get(i).getItemName();
}
session.close();
return betweenItems;
}
// To check if the given property is null
public String[] nullCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
cr.add(Restrictions.isNull("itemDescription"));
final List<Item> nullItemsList = cr.list();
final String nullDescItems[] = new String[nullItemsList.size()];
for (int i = 0; i < nullItemsList.size(); i++) {
nullDescItems[i] = nullItemsList.get(i).getItemName();
}
session.close();
return nullDescItems;
}
// To check if the given property is not null
public String[] notNullCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
cr.add(Restrictions.isNotNull("itemDescription"));
final List<Item> notNullItemsList = cr.list();
final String notNullDescItems[] = new String[notNullItemsList.size()];
for (int i = 0; i < notNullItemsList.size(); i++) {
notNullDescItems[i] = notNullItemsList.get(i).getItemName();
}
session.close();
return notNullDescItems;
}
// Adding more than one expression in one cr
public String[] twoCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
cr.add(Restrictions.isNull("itemDescription"));
cr.add(Restrictions.like("itemName", "chair%"));
final List<Item> notNullItemsList = cr.list();
final String notNullDescItems[] = new String[notNullItemsList.size()];
for (int i = 0; i < notNullItemsList.size(); i++) {
notNullDescItems[i] = notNullItemsList.get(i).getItemName();
}
session.close();
return notNullDescItems;
}
// To get items matching with the above defined conditions joined
// with Logical AND
public String[] andLogicalCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000);
final Criterion chairItems = Restrictions.like("itemName", "Chair%");
final LogicalExpression andExample = Restrictions.and(greaterThanPrice, chairItems);
cr.add(andExample);
final List<Item> andItemsList = cr.list();
final String andItems[] = new String[andItemsList.size()];
for (int i = 0; i < andItemsList.size(); i++) {
andItems[i] = andItemsList.get(i).getItemName();
}
session.close();
return andItems;
}
// To get items matching with the above defined conditions joined
// with Logical OR
public String[] orLogicalCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000);
final Criterion chairItems = Restrictions.like("itemName", "Chair%");
final LogicalExpression orExample = Restrictions.or(greaterThanPrice, chairItems);
cr.add(orExample);
final List<Item> orItemsList = cr.list();
final String orItems[] = new String[orItemsList.size()];
for (int i = 0; i < orItemsList.size(); i++) {
orItems[i] = orItemsList.get(i).getItemName();
}
session.close();
return orItems;
}
// Sorting example
public String[] sortingCriteria() {
final Session session = HibernateUtil.getHibernateSession();
final Criteria cr = session.createCriteria(Item.class);
cr.addOrder(Order.asc("itemName"));
cr.addOrder(Order.desc("itemPrice")).list();
final List<Item> sortedItemsList = cr.list();
final String sortedItems[] = new String[sortedItemsList.size()];
for (int i = 0; i < sortedItemsList.size(); i++) {
sortedItems[i] = sortedItemsList.get(i).getItemName();
}
session.close();
return sortedItems;
}
// Set projections Row Count
public Long[] projectionRowCount() {
final Session session = HibernateUtil.getHibernateSession();
final List<Long> itemProjected = session.createCriteria(Item.class).setProjection(Projections.rowCount()).list();
final Long projectedRowCount[] = new Long[itemProjected.size()];
for (int i = 0; i < itemProjected.size(); i++) {
projectedRowCount[i] = itemProjected.get(i);
}
session.close();
return projectedRowCount;
}
// Set projections average of itemPrice
public Double[] projectionAverage() {
final Session session = HibernateUtil.getHibernateSession();
final List avgItemPriceList = session.createCriteria(Item.class).setProjection(Projections.projectionList().add(Projections.avg("itemPrice"))).list();
final Double avgItemPrice[] = new Double[avgItemPriceList.size()];
for (int i = 0; i < avgItemPriceList.size(); i++) {
avgItemPrice[i] = (Double) avgItemPriceList.get(i);
}
session.close();
return avgItemPrice;
}
}

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">iamtheking</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<mapping resource="com/baeldung/hibernate/criteria/model/Item.hbm.xml" />
</session-factory>
</hibernate-configuration>

View File

@@ -1,7 +0,0 @@
CREATE TABLE `item` (
`ITEM_ID` int(11) NOT NULL AUTO_INCREMENT,
`ITEM_DESC` varchar(100) DEFAULT NULL,
`ITEM_PRICE` int(11) NOT NULL,
`ITEM_NAME` varchar(255) NOT NULL,
PRIMARY KEY (`ITEM_ID`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1;

View File

@@ -1,183 +0,0 @@
package com.baeldung.hibernate.criteria;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertTrue;
import java.util.List;
import org.hibernate.Session;
import org.junit.Test;
import com.baeldung.hibernate.criteria.model.Item;
import com.baeldung.hibernate.criteria.util.HibernateUtil;
import com.baeldung.hibernate.criteria.view.ApplicationView;
public class HibernateCriteriaIntegrationTest {
final private ApplicationView av = new ApplicationView();
@Test
public void testPerformanceOfCriteria() {
assertTrue(av.checkIfCriteriaTimeLower());
}
@Test
public void testLikeCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedLikeList = session.createQuery("From Item where itemName like '%chair%'").list();
final String expectedLikeItems[] = new String[expectedLikeList.size()];
for (int i = 0; i < expectedLikeList.size(); i++) {
expectedLikeItems[i] = expectedLikeList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedLikeItems, av.likeCriteria());
}
@Test
public void testILikeCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedChairCaseList = session.createQuery("From Item where itemName like '%Chair%'").list();
final String expectedChairCaseItems[] = new String[expectedChairCaseList.size()];
for (int i = 0; i < expectedChairCaseList.size(); i++) {
expectedChairCaseItems[i] = expectedChairCaseList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedChairCaseItems, av.likeCaseCriteria());
}
@Test
public void testNullCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedIsNullDescItemsList = session.createQuery("From Item where itemDescription is null").list();
final String expectedIsNullDescItems[] = new String[expectedIsNullDescItemsList.size()];
for (int i = 0; i < expectedIsNullDescItemsList.size(); i++) {
expectedIsNullDescItems[i] = expectedIsNullDescItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedIsNullDescItems, av.nullCriteria());
}
@Test
public void testIsNotNullCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedIsNotNullDescItemsList = session.createQuery("From Item where itemDescription is not null").list();
final String expectedIsNotNullDescItems[] = new String[expectedIsNotNullDescItemsList.size()];
for (int i = 0; i < expectedIsNotNullDescItemsList.size(); i++) {
expectedIsNotNullDescItems[i] = expectedIsNotNullDescItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedIsNotNullDescItems, av.notNullCriteria());
}
@Test
public void testAverageProjection() {
final Session session = HibernateUtil.getHibernateSession();
final List<Double> expectedAvgProjItemsList = session.createQuery("Select avg(itemPrice) from Item item").list();
final Double expectedAvgProjItems[] = new Double[expectedAvgProjItemsList.size()];
for (int i = 0; i < expectedAvgProjItemsList.size(); i++) {
expectedAvgProjItems[i] = expectedAvgProjItemsList.get(i);
}
session.close();
assertArrayEquals(expectedAvgProjItems, av.projectionAverage());
}
@Test
public void testRowCountProjection() {
final Session session = HibernateUtil.getHibernateSession();
final List<Long> expectedCountProjItemsList = session.createQuery("Select count(*) from Item").list();
final Long expectedCountProjItems[] = new Long[expectedCountProjItemsList.size()];
for (int i = 0; i < expectedCountProjItemsList.size(); i++) {
expectedCountProjItems[i] = expectedCountProjItemsList.get(i);
}
session.close();
assertArrayEquals(expectedCountProjItems, av.projectionRowCount());
}
@Test
public void testOrCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedOrCritItemsList = session.createQuery("From Item where itemPrice>1000 or itemName like 'Chair%'").list();
final String expectedOrCritItems[] = new String[expectedOrCritItemsList.size()];
for (int i = 0; i < expectedOrCritItemsList.size(); i++) {
expectedOrCritItems[i] = expectedOrCritItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedOrCritItems, av.orLogicalCriteria());
}
@Test
public void testAndCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedAndCritItemsList = session.createQuery("From Item where itemPrice>1000 and itemName like 'Chair%'").list();
final String expectedAndCritItems[] = new String[expectedAndCritItemsList.size()];
for (int i = 0; i < expectedAndCritItemsList.size(); i++) {
expectedAndCritItems[i] = expectedAndCritItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedAndCritItems, av.andLogicalCriteria());
}
@Test
public void testMultiCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedMultiCritItemsList = session.createQuery("From Item where itemDescription is null and itemName like'chair%'").list();
final String expectedMultiCritItems[] = new String[expectedMultiCritItemsList.size()];
for (int i = 0; i < expectedMultiCritItemsList.size(); i++) {
expectedMultiCritItems[i] = expectedMultiCritItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedMultiCritItems, av.twoCriteria());
}
@Test
public void testSortCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedSortCritItemsList = session.createQuery("From Item order by itemName asc, itemPrice desc").list();
final String expectedSortCritItems[] = new String[expectedSortCritItemsList.size()];
for (int i = 0; i < expectedSortCritItemsList.size(); i++) {
expectedSortCritItems[i] = expectedSortCritItemsList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedSortCritItems, av.sortingCriteria());
}
@Test
public void testGreaterThanCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedGreaterThanList = session.createQuery("From Item where itemPrice>1000").list();
final String expectedGreaterThanItems[] = new String[expectedGreaterThanList.size()];
for (int i = 0; i < expectedGreaterThanList.size(); i++) {
expectedGreaterThanItems[i] = expectedGreaterThanList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedGreaterThanItems, av.greaterThanCriteria());
}
@Test
public void testLessThanCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedLessList = session.createQuery("From Item where itemPrice<1000").list();
final String expectedLessThanItems[] = new String[expectedLessList.size()];
for (int i = 0; i < expectedLessList.size(); i++) {
expectedLessThanItems[i] = expectedLessList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedLessThanItems, av.lessThanCriteria());
}
@Test
public void betweenCriteriaQuery() {
final Session session = HibernateUtil.getHibernateSession();
final List<Item> expectedBetweenList = session.createQuery("From Item where itemPrice between 100 and 200").list();
final String expectedPriceBetweenItems[] = new String[expectedBetweenList.size()];
for (int i = 0; i < expectedBetweenList.size(); i++) {
expectedPriceBetweenItems[i] = expectedBetweenList.get(i).getItemName();
}
session.close();
assertArrayEquals(expectedPriceBetweenItems, av.betweenCriteria());
}
}

View File

@@ -1,15 +0,0 @@
package com.baeldung.hibernate.criteria;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class HibernateCriteriaTestRunner {
public static void main(final String[] args) {
Result result = JUnitCore.runClasses(HibernateCriteriaTestSuite.class);
for (Failure failure : result.getFailures()) {
}
}
}

View File

@@ -1,11 +0,0 @@
package com.baeldung.hibernate.criteria;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({ HibernateCriteriaIntegrationTest.class })
public class HibernateCriteriaTestSuite {
}

View File

@@ -1,22 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.baeldung.hibernate.criteria.model.Item" table="ITEM">
<id name="itemId" type="java.lang.Integer">
<column name="ITEM_ID" />
<generator class="identity" />
</id>
<property name="itemDescription" type="string">
<column name="ITEM_DESC" length="100" />
</property>
<property name="itemPrice" type="java.lang.Integer">
<column name="ITEM_PRICE" not-null="true" />
</property>
<property name="itemName" type="string">
<column name="ITEM_NAME" not-null="true" />
</property>
</class>
</hibernate-mapping>

View File

@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:testdb</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="show_sql">true</property>
<mapping resource="com/baeldung/hibernate/criteria/model/Item.hbm.xml" />
</session-factory>
</hibernate-configuration>