Бесплатный курс по Java: от основ до продвинутого уровня
Обзор языка запросов HQL в Hibernate
В hibernate используется HQL, а не SQL.
HQL работает с таблицей через класс, который связан с ней.
То есть в запросе к БД мы указываем не название таблицы, и ее аттрибутов, а название класса и его полей. Таким образом HQL является более объектно-ориентированным
Работа с HQL.
Давайте сделаем пару запросов на языке HQL.
В принципе он очень схож с SQL, поэтому трудностей для его понимания возникать не должно у тех кто знаком с SQL.
package HibernateApps;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateApp {
public static void main(String[] args) {
SessionFactory sessionfactory = new Configuration()
.configure(“hibernate.cfg.xml”)
.addAnnotatedClass(Book.class)
.buildSessionFactory();
Session session = sessionfactory.getCurrentSession();
try {
session = sessionfactory.getCurrentSession();
session.beginTransaction();
// Добавим еще одну книгу в таблицу
session.save(new Book(“LOTR”));
System.out.println(“--------------------”);
// Ниже происходит запрос выборки данных
// из таблицы books через класс Book.
// Вместо select * from books будет просто
// from Book (где Book – имя класса).
List books = session.createQuery(
“from Book”)
.getResultList();
System.out.println(“--------------------”);
// Извлечем теперь две конкретных книжки
// для демонстрации умного ключевого выражения.
// Здесь bookName — поле класса, вместо атрибута
// name таблицы.
// Как видим, язык во многом похож на SQL
List books2 = session.createQuery(
“from Book b where ” +
“b.bookName=’Harry Potter’ ” +
“or b.bookName=’LOTR'”)
.getResultList();
System.out.println(“---------------------“);
session.getTransaction().commit();
// Проверим содержимое списков books и books2,
// в которых хранятся результаты запросов.
// Для этого создана функция showBooks ниже.
// Она просто проходит циклом по List.
showBooks(books);
System.out.println(“---------------------“);
showBooks(books2);
} catch (Exception e) {
// Откатываем изменения в БД,
// если при транзакции случилась ошибка
session.getTransaction().rollback();
e.printStackTrace();
} finally {
// По окончании работы с сессией закрываем ее
session.close();
}
}
private static void showBooks(List books) {
for (Book tempBook : books) {
System.out.println(tempBook.toString());
}
}
}
Проверка работы Hibernate приложения.
Давайте запустим нашу программу.
Как видим, произошло три запроса. Один добавляет книгу в таблицу, Другие два производят выборку книг из таблицы.
Как видим, результаты запросов выборки были успешны. Первый запрос на выборку всех книг выбрал все книги и второй запрос на выборку двух конкретных книг выбрал эти две книги.