Тренировка гибернации

Hibernate Training In Chennai и Kodo — два популярных ORM-решения для Java-приложений. В этом руководстве представлены пошаговые инструкции для приложений Hibernate, но с небольшими отличиями их также можно использовать с Kodo. Hibernate предоставляет средства запроса и извлечения данных, которые значительно сокращают время разработки. Hibernate позволяет разрабатывать постоянные классы в соответствии с объектно-ориентированной идиомой, включая ассоциации, наследование, полиморфизм, композицию и коллекции. Hibernate позволяет вам выражать запросы в собственном переносимом расширении SQL (HQL), а также в собственном SQL или с помощью объектно-ориентированного API критериев и примеров.

мастерская

Workshop предлагает беспрецедентную поддержку разработки сложных веб-приложений на основе отраслевых стандартов, таких как JSF, EJB3 и JSP, и популярных сред, таких как Spring, Hibernate, Struts и Tiles. Семинар включает сложные редакторы WYSIWYG и технологию Oracle AppXRay, которая обеспечивает глубокий уровень понимания веб-приложения в целом, тем самым обеспечивая беспрецедентную глубину и возможности в автодополнении кода, проверке согласованности с сгенерированными классами, файлами конфигурации или аннотациями, ошибками перед сборкой. проверка и валидация на всех уровнях вашего приложения.

Workshop включает в себя инструменты управления базами данных и отображения O/R, включая обновленную поддержку Hibernate.

  • DbXplorer™ — обозреватель баз данных для всех популярных баз данных, включая Oracle, DB2, Sybase, SQL Server и MySQL.
  • DbXaminer™ — Просмотр диаграмм базы данных и редактор SQL
  • Диспетчер сущностей Hibernate EJB3, редактор сущностей Hibernate
  • HQL Editor, Hibernate Mapping Editor
  • Добавьте поддержку Hibernate в существующие проекты
  • Мощь AppXRay™ для всего вышеперечисленного — обеспечение завершения кода, проверки ошибок и проверки, которые распространяются на файлы и классы, связанные с Hibernate.

Спящий язык запросов

Язык запросов Hibernate (HQL) — это объектно-ориентированный язык запросов, похожий на SQL, но вместо операций с таблицами и столбцами HQL работает с постоянными объектами и их свойствами. Запросы HQL преобразуются Hibernate в обычные запросы SQL, которые, в свою очередь, выполняют действия в базе данных.

Хотя вы можете использовать операторы SQL напрямую с Hibernate, используя Native SQL, я бы рекомендовал использовать HQL, когда это возможно, чтобы избежать проблем с переносимостью базы данных и воспользоваться преимуществами стратегий генерации SQL и кэширования Hibernate.

Ключевые слова, такие как SELECT , FROM и WHERE и т. д., не чувствительны к регистру, но такие свойства, как имена таблиц и столбцов, чувствительны к регистру в HQL.

Пункт ОТ

Вы будете использовать предложение FROM, если хотите загрузить в память полные постоянные объекты. Ниже приведен простой синтаксис использования предложения FROM:

String hql = "FROM Employee";
Query query = session.createQuery(hql);
List results = query.list();

Если вам нужно полностью указать имя класса в HQL, просто укажите имя пакета и класса следующим образом:

String hql = "FROM com.hibernatebook.criteria.Employee";
Query query = session.createQuery(hql);
List results = query.list();

Пункт КАК

Предложение AS можно использовать для назначения псевдонимов классам в ваших запросах HQL, особенно при длинных запросах. Например, наш предыдущий простой пример будет следующим:

String hql = "FROM Employee AS E";
Query query = session.createQuery(hql);
List results = query.list();

Ключевое слово AS является необязательным, и вы также можете указать псевдоним сразу после имени класса, как показано ниже:

String hql = "FROM Employee E";
Query query = session.createQuery(hql);
List results = query.list();

SELECT Предложение

Предложение SELECT обеспечивает больший контроль над набором результатов, чем предложение from. Если вы хотите получить несколько свойств объектов вместо всего объекта, используйте предложение SELECT. Ниже приведен простой синтаксис использования предложения SELECT для получения только поля first_name объекта Employee:

String hql = "SELECT E.firstName FROM Employee E";
Query query = session.createQuery(hql);
List results = query.list();

Здесь следует отметить, что Employee.firstName является свойством объекта Employee, а не полем таблицы EMPLOYEE.

ГДЕ Предложение

Если вы хотите сузить круг конкретных объектов, возвращаемых из хранилища, используйте предложение WHERE. Ниже приведен простой синтаксис использования предложения WHERE:

String hql = "FROM Employee E WHERE E.id = 10";
Query query = session.createQuery(hql);
List results = query.list();

ЗАКАЗАТЬ

Чтобы отсортировать результаты вашего HQL-запроса, вам нужно будет использовать предложение ORDER BY. Вы можете упорядочить результаты по любому свойству объектов в результирующем наборе по возрастанию (ASC) или по убыванию (DESC). Ниже приведен простой синтаксис использования предложения ORDER BY:

String hql = "FROM Employee E WHERE E.id > 10 ORDER BY E.salary DESC";
Query query = session.createQuery(hql);
List results = query.list();

Если вы хотите отсортировать более чем по одному свойству, вы просто добавили бы дополнительные свойства в конец предложения order by, разделив их запятыми следующим образом:

String hql = "FROM Employee E WHERE E.id > 10 " +
             "ORDER BY E.firstName DESC, E.salary DESC ";
Query query = session.createQuery(hql);
List results = query.list();

ГРУППА ПО ПРЕДЛОЖЕНИЮ

Это предложение позволяет Hibernate извлекать информацию из базы данных и группировать ее на основе значения атрибута и, как правило, использовать результат для включения совокупного значения. Ниже приведен простой синтаксис использования предложения GROUP BY:

String hql = "SELECT SUM(E.salary), E.firtName FROM Employee E " +
             "GROUP BY E.firstName";
Query query = session.createQuery(hql);
List results = query.list();

Использование именованных параметров

Hibernate поддерживает именованные параметры в своих HQL-запросах. Это упрощает написание HQL-запросов, которые принимают ввод от пользователя, и вам не нужно защищаться от атак с внедрением SQL. Ниже приведен простой синтаксис использования именованных параметров:

String hql = "FROM Employee E WHERE E.id = :employee_id";
Query query = session.createQuery(hql);
query.setParameter("employee_id",10);
List results = query.list();

Пункт ОБНОВЛЕНИЕ

Массовые обновления появились впервые в HQL с Hibernate 3, и удаление в Hibernate 3 работает иначе, чем в Hibernate 2. Интерфейс Query теперь содержит метод executeUpdate() для выполнения операторов HQL UPDATE или DELETE.

Предложение UPDATE можно использовать для обновления одного или нескольких свойств одного или нескольких объектов. Ниже приведен простой синтаксис использования предложения UPDATE:

String hql = "UPDATE Employee set salary = :salary "  + 
             "WHERE id = :employee_id";
Query query = session.createQuery(hql);
query.setParameter("salary", 1000);
query.setParameter("employee_id", 10);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);

УДАЛИТЬ Пункт

Предложение DELETE может использоваться для удаления одного или нескольких объектов. Ниже приведен простой синтаксис использования предложения DELETE:

String hql = "DELETE FROM Employee "  + 
             "WHERE id = :employee_id";
Query query = session.createQuery(hql);
query.setParameter("employee_id", 10);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);

ВСТАВИТЬ пункт

HQL поддерживает предложение INSERT INTO только там, где записи могут быть вставлены из одного объекта в другой объект. Ниже приведен простой синтаксис использования предложения INSERT INTO:

String hql = "INSERT INTO Employee(firstName, lastName, salary)"  + 
             "SELECT firstName, lastName, salary FROM old_employee";
Query query = session.createQuery(hql);
int result = query.executeUpdate();
System.out.println("Rows affected: " + result);

Агрегированные методы

HQL поддерживает ряд агрегатных методов, подобных SQL. В HQL они работают так же, как и в SQL, и ниже приведен список доступных функций:

SNFunctionsDescription1avg(имя свойства)Среднее значение свойства2count(имя свойства или *)Количество раз, когда свойство встречается в результатах3max(имя свойства)Максимальное значение свойства values4min(имя свойства)Минимальное значение свойства values5sum (имя свойства) Сумма значений свойств

Ключевое слово distinct подсчитывает только уникальные значения в наборе строк. Следующий запрос вернет только уникальный счетчик:

String hql = "SELECT count(distinct E.firstName) FROM Employee E";
Query query = session.createQuery(hql);
List results = query.list();

Разбиение на страницы с помощью запроса

Существует два метода интерфейса Query для разбиения на страницы.

S.N.Method & Description1Запрос setFirstResult(int startPosition)

Этот метод принимает целое число, представляющее первую строку в вашем наборе результатов, начиная со строки 0.

2Query setMaxResults(int maxResult)

Этот метод указывает Hibernate получить фиксированное количество объектов maxResults.

Используя два вышеуказанных метода вместе, мы можем создать компонент подкачки в нашем веб-приложении или приложении Swing. Ниже приведен пример, который вы можете расширить, чтобы получить 10 строк за раз:

String hql = "FROM Employee";
Query query = session.createQuery(hql);
query.setFirstResult(1);
query.setMaxResults(10);
List results = query.list();

Веб-приложение со спящим режимом

Здесь мы собираемся создать веб-приложение со спящим режимом. Для создания веб-приложения мы используем JSP для логики представления, класс Bean для представления данных и класс DAO для кодов базы данных.

Поскольку мы создаем простое приложение в спящем режиме, нам не нужно выполнять какие-либо дополнительные операции в спящем режиме для создания веб-приложения. В таком случае мы получаем значение от пользователя, используя файл JSP.

Пример создания веб-приложения с использованием гибернации

В этом примере мы собираемся вставить запись пользователя в базу данных. Это просто регистрационная форма.

index.jsp

Эта страница получает ввод от пользователя и отправляет его в файл register.jsp с помощью метода post.

  1. ‹form action="register.jsp" method="post"›
  2. Имя:‹тип ввода=”текст” имя=”имя”/›‹br›‹br/›
  3. Пароль:‹тип ввода=”пароль” имя=”пароль”/›‹br›‹br/›
  4. Идентификатор электронной почты:‹input type="text" name="email"/›‹br›‹br/›
  5. ‹тип ввода=”отправить” значение=”зарегистрироваться”/›”

регистрация.jsp

Этот файл получает все параметры запроса и сохраняет эту информацию в объекте класса User. Далее он вызывает метод register класса UserDao, передавая объект класса User.

  1. ‹%@page import="com.javatpoint.mypack.UserDao"%›
  2. ‹jsp:useBean id="obj" класс="com.javatpoint.mypack.User"›
  3. ‹/jsp:useBean›
  4. ‹jsp:setProperty свойство=”*” имя=”obj”/›
  5. <%
  6. int i=UserDao.register(obj);
  7. if(i>0)
  8. out.print("Вы успешно зарегистрированы");
  9. %>

Пользователь.java

Это простой класс компонента, представляющий класс Persistent в спящем режиме.

  1. пакет com.javatpoint.mypack;
  2. общедоступный класс Пользователь {
  3. частный int идентификатор;
  4. private Имя строки, пароль, электронная почта;
  5. //геттеры и сеттеры
  6. }

пользователь.hbm.xml

Он сопоставляет класс User с таблицей базы данных.

  1. ‹?xml версия=’1.0’ кодировка=’UTF-8’?›
  2. ‹!DOCTYPE hibernate-mapping PUBLIC
  3. «-//Hibernate/Hibernate Mapping DTD 3.0//EN»
  4. «http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd›
  5. ‹отображение спящего режима›
  6. класс name="com.javatpoint.mypack.User" table="u400"›
  7. ‹идентификатор имени="id"›
  8. ‹генератор класс=”приращение”›‹/генератор›
  9. </id>
  10. ‹имя свойства="имя"›‹/свойство›
  11. ‹имя свойства="пароль"›‹/свойство›
  12. ‹имя свойства="электронная почта"›‹/свойство›
  13. ‹/класс
  14. ‹/отображение спящего режима›

UserDao.java

Класс Dao, содержащий метод для хранения экземпляра класса User.

  1. пакет com.javatpoint.mypack;
  2. импорт org.hibernate.Session;
  3. импорт org.hibernate.Transaction;
  4. импорт org.hibernate.cfg.Configuration;
  5. общедоступный класс UserDao {
  6. public static int register(User u){
  7. целое i=0;
  8. Session session=новая конфигурация().
  9. настроить().buildSessionFactory().openSession();
  10. Транзакция t=session.beginTransaction();
  11. т.начать();
  12. i=(Целое число)session.save(u);
  13. t.коммит();
  14. сеанс.закрыть();
  15. возврат я;
  16. }
  17. }

hibernate.cfg.xml

Это файл конфигурации, содержащий информацию о базе данных и файле сопоставления.

  1. ‹?xml версия=’1.0’ кодировка=’UTF-8’?›
  2. ‹!DOCTYPE конфигурация гибернации ПУБЛИЧНАЯ
  3. «-//Hibernate/Hibernate Configuration DTD 3.0//EN»
  4. «http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd›
  5. ‹конфигурация спящего режима›
  6. ‹сеанс-фабрика›
  7. ‹имя свойства="hbm2ddl.auto"›создать‹/свойство›
  8. ‹имя свойства="диалект"›org.hibernate.dialect.Oracle9Dialect‹/property›
  9. ‹имя свойства=”connection.url”›jdbc:oracle:thin:@localhost:1521:xe‹/property›
  10. ‹имя свойства="connection.username"›система‹/свойство›
  11. ‹имя свойства="connection.password"›оракул‹/свойство›
  12. ‹имя свойства=”connection.driver_class”›oracle.jdbc.driver.OracleDriver‹/property›
  13. ‹сопоставление ресурса=”user.hbm.xml”/›
  14. ‹/сеанс-фабрика›
  15. ‹/hibernate-конфигурация›