Рубрики
Без рубрики

Примеры критериев перехода в спящий режим

– Примеры критериев гибернации

API критериев гибернации – это более объектно-ориентированная и элегантная альтернатива языку запросов гибернации (HQL). Это всегда хорошее решение для приложения, которое имеет множество дополнительных критериев поиска.

Пример в HQL и критерии

Вот пример для получения списка StockDailyRecord с дополнительными критериями поиска – дата начала, дата окончания и объем, порядок по дате.

1. Пример HQL

В HQL вам нужно сравнить, является ли это первым критерием для добавления синтаксиса “где” и форматирования даты в подходящий формат. Это работа, но длинные коды уродливы, громоздки и подвержены ошибкам объединение строк может вызвать проблемы с безопасностью, такие как внедрение SQL.

public static List getStockDailtRecord(Date startDate,Date endDate,
   Long volume,Session session){
		
   SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
   boolean isFirst = true; 
		
   StringBuilder query = new StringBuilder("from StockDailyRecord ");
		
   if(startDate!=null){
	if(isFirst){
		query.append(" where date >= '" + sdf.format(startDate) + "'");
	}else{
		query.append(" and date >= '" + sdf.format(startDate) + "'");
	}
	isFirst = false;
   }
		
   if(endDate!=null){
	if(isFirst){
		query.append(" where date <= '" + sdf.format(endDate) + "'");
	}else{
		query.append(" and date <= '" + sdf.format(endDate) + "'");
	}
	isFirst = false;
   }

   if(volume!=null){
	if(isFirst){
		query.append(" where volume >= " + volume);
	}else{
		query.append(" and volume >= " + volume);
	}
	isFirst = false;
   }
		
   query.append(" order by date");
   Query result = session.createQuery(query.toString());
	
   return result.list();
}

2. Пример критериев

В критериях вам не нужно сравнивать, является ли это первым критерием для добавления синтаксиса “где” или форматирования даты. Строка кода сокращена, и все обрабатывается более элегантным и объектно-ориентированным способом.

   public static List getStockDailyRecordCriteria(Date startDate,Date endDate,
        Long volume,Session session){
		
	Criteria criteria = session.createCriteria(StockDailyRecord.class);
	if(startDate!=null){
		criteria.add(Expression.ge("date",startDate));
	}
	if(endDate!=null){
		criteria.add(Expression.le("date",endDate));
	}
	if(volume!=null){
		criteria.add(Expression.ge("volume",volume));
	}
	criteria.addOrder(Order.asc("date"));
		
	return criteria.list();
  }

API критериев

Давайте рассмотрим некоторые популярные функции API критериев.

1. Критерии базовый запрос

Создайте объект критериев и извлеките все записи “Stockdailyrecord” из базы данных.

Criteria criteria = session.createCriteria(StockDailyRecord.class);

2. Запрос на упорядочение критериев

Результат сортируется по “дате” в порядке возрастания.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
    .addOrder( Order.asc("date") );

Результат сортируется по “дате” в порядке убывания.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
    .addOrder( Order.desc("date") );

3. Запрос ограничений критериев

Класс ограничений предоставляет множество методов для выполнения операции сравнения.

Класс ограничений предоставляет множество методов для выполнения операции сравнения.

Убедитесь, что громкость равна 10000.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
    .add(Restrictions.eq("volume", 10000));
Restrictions.lt, ле, gt, ge

Убедитесь, что громкость меньше 10000.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
   .add(Restrictions.lt("volume", 10000));

Убедитесь, что громкость меньше или равна 10000.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
   .add(Restrictions.le("volume", 10000));

Убедитесь, что громкость больше 10000.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
   .add(Restrictions.gt("volume", 10000));

Убедитесь, что громкость больше или равна 10000.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
   .add(Restrictions.ge("volume", 10000));
Убедитесь, что громкость больше или равна 10000.

Убедитесь, что название акции начинается с “MKYONG” и сопровождается любыми символами.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
   .add(Restrictions.like("stockName", "MKYONG%"));
Убедитесь, что название акции начинается с “MKYONG” и сопровождается любыми символами.

Убедитесь, что дата находится между датой начала и датой окончания.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
   .add(Restrictions.between("date", startDate, endDate));
Ограничения.Это не так, это не так

Убедитесь, что громкость равна нулю.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
   .add(Restrictions.isNull("volume"));

Убедитесь, что громкость не равна нулю.

Criteria criteria = session.createCriteria(StockDailyRecord.class)
   .add(Restrictions.isNotNull("volume"));

Многие другие функции ограничений можно найти здесь. https://www.hibernate.org/hib_docs/v3/api/org/hibernate/criterion/Restrictions.html

3. Критерии подкачки результата

Критерии предоставляют несколько функций, которые чрезвычайно упрощают разбиение на страницы. Начиная с 20-й записи, и извлеките следующие 10 записей из базы данных.

Criteria criteria = session.createCriteria(StockDailyRecord.class);
criteria.setMaxResults(10);
criteria.setFirstResult(20);

Почему бы и нет Критериев!?

API критериев действительно имеет некоторые недостатки.

1. Проблема с производительностью

У вас нет возможности управлять SQL-запросом, сгенерированным Hibernate, если сгенерированный запрос выполняется медленно, вам очень сложно настроить запрос, и вашему администратору базы данных это может не понравиться.

1. Проблема с обслуживанием

Все SQL-запросы разбросаны по Java-коду, когда запрос пошел не так, вы можете потратить время на поиск проблемного запроса в своем приложении. С другой стороны, именованные запросы, хранящиеся в файлах отображения гибернации, намного проще в обслуживании.

Вывод

Ничто не идеально, учитывайте потребности вашего проекта и используйте его с умом.

Оригинал: “https://mkyong.com/hibernate/hibernate-criteria-examples/”