| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <!-- |
| Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. |
| --> |
| <html> |
| <head> |
| <title>Использование Hibernate в приложении Swing Java – учебное руководство по IDE NetBeans</title> |
| <!-- BEGIN METADATA --> |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> |
| <meta name="description" content="Demonstrates how use Hibernate as the persistence layer in a Java Swing application."> |
| <meta name="KEYWORDS" content="NetBeans, Hibernate, Swing, J2SE, Java SE"> |
| <link rel="stylesheet" href="../../../netbeans.css" type="text/css"> |
| <!-- END METADATA --> |
| |
| </head> |
| <body> |
| |
| <a name="top"></a> |
| <h1>Использование библиотеки Hibernate в приложении Java на базе Swing</h1> |
| |
| <p>В этом учебном руководстве IDE NetBeans используется для создания и развертывания приложения Swing Java, в котором отображаются данные из базы данных. Приложение использует библиотеку Hibernate в качестве слоя сохранения состояния для извлечения POJO (простых объектов Java) из реляционной базы данных.</p> |
| |
| <p>Библиотека Hibernate предоставляет средства для объектно-реляционного сопоставления (ORM). В руководстве демонстрируется поддержка библиотеки Hibernate в среде IDE и использование мастеров для создания необходимых файлов Hibernate. После создания объектов Java и настройки приложения для использования Hibernate создается графический пользовательский интерфейс для поиска и отображения данных.</p> |
| |
| <p> |
| Приложение, создаваемое в этом курсе, представляет собой средство администрирования, дополняющее <a href="../web/hibernate-webapp.html">веб-приложение "DVD Store"</a>. В данном руководстве описывается создание приложения, позволяющего запрашивать подробные данные актера на основе соответствия имени или фамилии. При необходимости приложение можно расширить путем добавления функциональных возможностей запроса подробных данных о фильме, а также добавления/обновления/удаления объектов. В рамках руководства используется СУБД MySQL и база данных "Sakila", однако в приложениях Hibernate допускается использование любого поддерживаемого сервера базы данных. База данных "Sakila" представляет собой типовую базу данных, которая может быть загружена с сайта MySQL. Информация о настройке базы данных "Sakila" приведена в следующих разделах. </p> |
| |
| <p>Перед изучением этого учебного курса можно ознакомиться со следующей документацией:</p> |
| <ul> |
| <li>Документация по библиотеке Hibernate по адресу <a href="http://www.hibernate.org/" target="_blank">hibernate.org</a></li> |
| <li><a href="gui-functionality.html">Введение в разработку графического интерфейса </a></li> |
| <li>Учебный курс <a href="../ide/mysql.html">Подключение к базе данных MySQL</a>.</li> |
| </ul> |
| |
| <p class="tips">Сведения о создании этого приложения с помощью Maven см. в разделе <a href="maven-hib-java-se.html">Создание приложения Maven Swing с помощью Hibernate</a>.</p> |
| |
| |
| <p><b>Содержание</b></p> |
| <img alt="Содержимое на этой странице применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0"> |
| <ul class="toc"> |
| <li><a href="#01">Создание базы данных</a></li> |
| <li><a href="#02">Создание проекта приложения Java на базе Swing</a></li> |
| <li><a href="#03">Добавление поддержки библиотеки Hibernate к проекту</a> |
| <ul> |
| <li><a href="#03a">Создание файла настройки библиотеки Hibernate</a></li> |
| <li><a href="#03b">Изменение файла настройки библиотеки Hibernate</a></li> |
| <li><a href="#03c">Создание служебного файла <tt>HibernateUtil.java</tt></a></li> |
| </ul> |
| </li> |
| <li><a href="#05">Создание файлов отображения библиотеки Hibernate и классов Java</a> |
| <ul> |
| <li><a href="#05a">Создание файла обратного проектирования</a></li> |
| <li><a href="#05b">Создание файлов отображения библиотеки Hibernate и объектов POJO на основе базы данных</a></li> |
| </ul> |
| </li> |
| <li><a href="#06">Создание графического интерфейса пользователя приложения</a> |
| <ul> |
| <li><a href="#06a">Создание формы "Jframe"</a></li> |
| <li><a href="#06b">Добавление элементов к форме</a></li> |
| </ul> |
| |
| </li> |
| <li><a href="#07">Создание запроса в редакторе запросов HQL Query Editor</a></li> |
| <li><a href="#08">Добавление запроса к форме</a></li> |
| <li><a href="#09">Выполнение проекта</a> |
| <ul> |
| <li><a href="#09a">Загрузка проекта решения</a></li> |
| </ul> |
| </li> |
| <li><a href="#10">Создание объектов POJO и файлов отображения по отдельности</a> (дополнительно)</li> |
| </ul> |
| |
| |
| <p><b>Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.</b></p> |
| |
| <table> |
| <tbody> |
| <tr> |
| <th class="tblheader" scope="col">Программное обеспечение или материал</th> |
| <th class="tblheader" scope="col">Требуемая версия</th> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="https://netbeans.org/downloads/index.html">IDE NetBeans</a></td> |
| <td class="tbltd1">7.2, 7.3, 7.4, 8.0, Java</td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://java.sun.com/javase/downloads/index.jsp">Комплект для разработчика на языке Java (JDK)</a></td> |
| <td class="tbltd1">версия 7 или 8</td> |
| </tr> |
| <tr> |
| <td class="tbltd1"><a href="http://www.mysql.com/">Сервер базы данных MySQL</a></td> |
| <td class="tbltd1">версия 5.x</td> |
| </tr> |
| <tr> |
| <td class="tbltd1">База данных "Sakila"</td> |
| <td class="tbltd1">подключаемый модуль, который можно получить в центре обновления</td> |
| </tr> |
| </tbody> |
| </table> |
| <p class="tips">Можно загрузить <a href="https://netbeans.org/projects/samples/downloads/download/Samples/Java/DVDStoreAdmin-Ant.zip">готовый проект в виде архива ZIP</a>.</p> |
| |
| <a name="01"></a> |
| <h2>Создание базы данных</h2> |
| <p>В этом учебном курсе используется база данных MySQL с названием <tt>sakila</tt>. Пример базы данных не входит в устанавливаемую в среду IDE, поэтому перед изучением этого учебного курса необходимо создать базу данных. |
| </p> |
| <p>База данных "Sakila" представляет собой свободно распространяемый пример базы данных, который можно загрузить с сайта MySQL. Для создания базы данных "Sakila" можно загрузить и установить подключаемый модуль "Sakila Sample Database" с использованием диспетчера подключаемых модулей. После установки подключаемого модуля можно создать базу данных "Sakila" в окне "Services". База данных "Sakila" будет добавлена к списку баз данных в диалоговом окне "Create MySQL database".</p> |
| <p>Для получения дополнительной информации о настройке среды IDE для работы с MySQL см. учебный курс <a href="../ide/mysql.html">Подключение к базе данных MySQL</a>.</p> |
| |
| <ol> |
| <li>Откройте диспетчер подключаемых модулей и установите подключаемый модуль "Sakila Sample Database".</li> |
| <li>После установки подключаемого модуля, запустите сервера MySQL базы данных путем расширения узла 'Базы данных' в окне 'Службы', щелкните правой кнопкой мыши узел MySQL Server и выберите 'Запустить'.</li> |
| <li>Щелкните правой кнопкой мыши узел сервера MySQL и выберите Create Database ("Создать базу данных"). </li> |
| <li>Выберите базу данных "Sakila"из раскрывающегося списка "New Database Name" в диалоговом окне "Create MySQL Database". Нажмите кнопку "ОК".<br /> <img alt="Снимок диалогового окна создания базы данных MySQL" class="margin-around b-all" height="176" src="../../../images_www/articles/72/java/hibernate-j2se/create-sakila-mysql.png" title="Снимок диалогового окна создания базы данных MySQL" width="393"> |
| |
| <p>При нажатии кнопки "OK" узел "Sakila" появится под узлом "MySQL Server".</p> |
| <li>Щелкните правой кнопкой мыши узел "Sakila" и выберите "Connect".</li> |
| </ol> |
| <p>После нажатия кнопки "Connect a database" под узлом "Databases" отобразится узел подключения к базе данных "Sakila" (<tt>jdbc:mysql://localhost:3306/sakila [<i>username</i> on Default]</tt>). При открытом подключении для просмотра данных в базе данных разверните этот узел подключения.</p> |
| |
| <a name="02"></a> |
| <h2>Создание проекта приложения Java на базе Swing</h2> |
| <p>В этом упражнении будет создан простой проект приложения Java на базе Swing с именем "DVDStoreAdmin". |
| </p> |
| |
| <ol> |
| <li>Выберите команду "Файл" > "Создать проект" (CTRL+SHIFT+N). Выберите приложение Java из категории Java и нажмите "Next". </li> |
| <li>Введите <b>DVDStoreAdmin</b> в качестве имени проекта и укажите местоположение проекта.</li> |
| <li>Снимите флажок "Использовать отдельную папку", если он установлен.<br /> В рамках этого руководства копирование библиотек проекта в выделенную папку лишено смысла, поскольку совместное использование библиотек с другими пользователями не потребуется.</li> |
| <li>Снимите флажок "Create Main Class". Нажмите кнопку "Завершить".</li> |
| </ol> |
| |
| <p>При нажатии кнопки "Finish" в среде IDE будет создан проект приложения Java. В проекте нет главного класса. Следует создать форму и установить ее в качестве главного класса.</p> |
| |
| |
| |
| <a name="03"></a> |
| <h2>Добавление поддержки библиотеки Hibernate к проекту</h2> |
| <p>Для добавления поддержки библиотеки Hibernate к проекту J2SE необходимо добавить библиотеку Hibernate в проект. Библиотека Hibernate входит в состав IDE и может быть добавлена к любому проекту. Для этого щелкните правой кнопкой мыши узел 'Библиотеки' в окне 'Проекты', выберите 'Добавить библиотеку', а затем выберите библиотеку Hibernate в диалоговом окне 'Добавить библиотеку'.</p> |
| |
| <p>В среде IDE содержатся мастеры, упрощающие создание файлов библиотеки Hibernate, которые потребуются в проекте. Мастеры, включенные в среду IDE, могут использоваться для создания файла настройки библиотеки Hibernate и вспомогательного служебного класса. Если файл настройки библиотеки Hibernate создан с использованием мастера, библиотеки Hibernate автоматически добавляются к проекту.</p> |
| |
| <a name="03a"></a> |
| <div class="indent"> |
| <h3>Создание файла настройки библиотеки Hibernate</h3> |
| <p>Файл настройки библиотеки Hibernate (<tt>hibernate.cfg.xml</tt>) содержит информацию о подключении к базе данных, сопоставлениях ресурсов и других свойствах подключения. При создании файла настройки Hibernate с использованием мастера подключение к базе данных определяется путем выбора из списка подключений, зарегистрированных в среде IDE. В ходе создания файла настройки подробная информация о подключении и сведения о диалекте добавляются автоматически в соответствии с выбранным подключением к базе данных. В среде IDE библиотека Hibernate также автоматически добавляется в путь класса проекта. После создания файла настройки можно изменить файл с использованием редактора с несколькими представлениями или внести изменения в код XML непосредственно в редакторе XML.</p> |
| |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел "Source Packages" в окне "Projects" и выберите "New > Other" для открытия мастера "New File".</li> |
| <li>Выберите элемент "Hibernate Configuration Wizard" из категории "Hibernate". Нажмите кнопку "Далее".</li> |
| <li>Оставьте значения по умолчанию на панели "Имя и местоположение" (создается файл в каталоге <tt>src</tt>). Нажмите кнопку "Далее".</li> |
| <li>Выберите подключение "sakila" из раскрывающегося списка "Database Connection". Нажмите кнопку "Завершить".</li> |
| |
| </ol> |
| <img alt="Снимок создания подключения к базе данных" class="margin-around b-all" height="193" src="../../../images_www/articles/72/java/hibernate-j2se/hib-config.png" title="Диалоговое окно для выбора подключения к базе данных" width="500"> |
| |
| <p>При нажатии кнопки "Finish" файл <tt>hibernate.cfg.xml</tt> откроется в редакторе исходного кода в среде IDE. В среде IDE файл настройки создается в корне контекстного пути к классам приложения (в окне "Files", "WEB-INF/classes"). В окне 'Проекты' файл находится в исходном пакете <tt><пакет, заданный по умолчанию></tt>. Файл настройки содержит информацию об отдельной базе данных. Если планируется подключение к нескольким базам данных, в проекте можно создать несколько файлов настройки (по одному для каждого сервера базы данных), но по умолчанию во вспомогательном служебном классе будет использоваться файл <tt>hibernate.cfg.xml</tt>, расположенный в корневом каталоге.</p> |
| |
| <p>После разворачивания узла "Libraries" в окне "Projects" видно, что к проекту добавлены требуемые архивы JAR библиотеки Hibernate и архив JAR соединителя MySQL.</p> |
| <img alt="Снимок окна 'Проекты', в котором отображаются библиотеки Hibernate" class="margin-around b-all" src="../../../images_www/articles/80/java/hibernate-j2se/hib-libraries-config.png" title="Снимок окна 'Проекты', в котором отображаются библиотеки Hibernate"> |
| <p class="notes"><strong>Примечание.</strong> В среду NetBeans IDE 8.0 входят библиотеки Hibernate 4. Старые версии IDE, связанные с Hibernate 3.</p> |
| |
| |
| <a name="03b"></a> |
| <h3>Изменение файла настройки библиотеки Hibernate</h3> |
| <p>В этом упражнении будут изменены свойства по умолчанию, указанные в <tt>hibernate.cfg.xml</tt>, для включения функции протоколирования отладки для операторов SQL. |
| </p> |
| <ol> |
| <li>Откройте <tt>hibernate.cfg.xml</tt> на вкладке "Проект". Для открытия файла можно развернуть узел "Configuration Files" в окне "Projects" и дважды щелкнуть <tt>hibernate.cfg.xml</tt>.</li> |
| <li>Разверните узел "Configuration Properties" в области "Optional Properties".</li> |
| <li>Нажмите кнопку "Add" для открытия диалогового окна "Add Hibernate Property".</li> |
| <li>В диалоговом окне выберите свойство <tt>hibernate.show_sql</tt> и установите значение <tt>true</tt>. Нажмите кнопку "ОК". Это приведет ко включению протоколирования отладки операторов SQL.<br /> <img alt="Диалоговое окно 'Добавить свойство Hibernate' для свойства hibernate.show_sql" class="margin-around b-all" height="161" src="../../../images_www/articles/80/web/hibernate-webapp/add-property-showsql.png" title="Диалоговое окно 'Добавить свойство Hibernate', в котором отображаются значения настроек для свойства hibernate.show_sql" width="392"></li> |
| <li>Щелкните "Добавить" в узле "Различные свойства" и выберите <tt>hibernate.query.factory_class</tt> в раскрывающемся списке "Имя свойства".</li> |
| <li>Введите <strong>org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</strong> в качестве значения свойства. |
| <p>Класс 'translator factory' используется в библиотеке Hibernate 4, связанной с IDE. </p> |
| <p>Нажмите кнопку "ОК".</p> |
| <img alt="Диалоговое окно 'Добавить свойство Hibernate' для свойств hibernate.query.factory_class" class="margin-around b-all" src="../../../images_www/articles/80/web/hibernate-webapp/add-property-factoryclass-4.png" title="Диалоговое окно 'Добавить свойство Hibernate', в котором отображаются значения настроек для свойства hibernate.query.factory_class property"> |
| <p class="alert">При использовании NetBeans IDE 7.4 или более ранней версии необходимо выбрать <strong>org.hibernate.hql.classic.ClassicQueryTranslatorFactory</strong> в качестве значения свойства в диалоговом окне. NetBeans IDE 7.4 и более ранние версии, связанные с библиотекой Hibernate 3. |
| </p> |
| <img alt="Диалоговое окно 'Добавить свойство Hibernate' для свойств hibernate.query.factory_class" class="margin-around b-all" src="../../../images_www/articles/80/web/hibernate-webapp/add-property-factoryclass.png" title="Диалоговое окно 'Добавить свойство Hibernate', в котором отображаются значения настроек для свойства hibernate.query.factory_class property"> |
| |
| |
| <p>При выборе вкладки "XML" в редакторе можно просмотреть файл в режиме XML. Файл должен выглядеть следующим образом:</p> |
| <pre class="examplecode"><hibernate-configuration> |
| <session-factory name="session1"> |
| <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> |
| <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> |
| <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sakila</property> |
| <property name="hibernate.connection.username">root</property> |
| <property name="hibernate.connection.password">######</property> |
| <property name="hibernate.show_sql">true</property> |
| <property name="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</property> |
| </session-factory> |
| </hibernate-configuration></pre> |
| </li> |
| <li>Сохраните измененный файл.</li> |
| </ol> |
| <p>После создания формы и настройки ее в качестве основного класса, вы сможете увидеть SQL запросов, выведенные на печать в окне вывода IDE при выполнении проекта.</p> |
| |
| <a name="03c"></a> |
| <h3>Создание вспомогательного файла <tt>HibernateUtil.java</tt></h3> |
| <p>Для использования библиотеки Hibernate необходимо создать вспомогательный класс для обработки запуска и обращения к <tt>SessionFactory</tt> библиотеки Hibernate для получения объекта "Session". Класс обеспечивает вызов метода <tt>configure()</tt> библиотеки Hibernate, загрузку файла настройки <tt>hibernate.cfg.xml</tt> и последующую сборку <tt>SessionFactory</tt> для получения объекта "Session". |
| </p> |
| |
| <p>В этом разделе для создания вспомогательного класса <tt>HibernateUtil.java</tt> используется мастер создания файла.</p> |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел "Source Packages" и выберите "New > Other" для открытия мастера "New File".</li> |
| <li>Выберите "Hibernate" из списка "Categories" и "HibernateUtil.java" из списка "File Types". Нажмите кнопку "Далее".<br> <img alt="Описание создания HibernateUtil с помощью мастера создания файлов" class="margin-around b-all" src="../../../images_www/articles/80/java/hibernate-j2se/hib-util.png" title="Описание создания HibernateUtil с помощью мастера создания файлов"></li> |
| <li>Введите <strong>HibernateUtil</strong> в качестве имени класса и <strong>sakila.util</strong> в качестве имени пакета. Нажмите кнопку "Завершить".</li> |
| |
| </ol> |
| <p>После нажатия кнопки "Finish" в редакторе откроется класс <tt>HibernateUtil.java</tt>. Файл можно закрыть, т.к. необходимость в его изменении отсутствует.</p> |
| |
| |
| </div> |
| |
| |
| |
| <a name="05"></a> |
| <h2>Создание файлов сопоставления библиотеки Hibernate и классов Java</h2> |
| |
| <p>В этом руководстве для отображения данных в таблице "ACTOR" базы данных используется простой старый объект Java (POJO) <tt>Actor.java</tt>. Класс указывает поля для столбцов в таблицах и использует простые методы установки и получения значений для извлечения и записи данных. Для сопоставления <tt>Actor.java</tt> с таблицей "ACTOR" можно использовать файл сопоставления библиотеки Hibernate или аннотации в классе.</p> |
| |
| <p>Мастер обратного проектирования, файлы отображения библиотеки Hibernate и объекты POJO могут использоваться в мастере "Database" для создания нескольких объектов POJO и файлов отображения на основе выбранных таблиц базы данных. Кроме того, в среде IDE можно использовать мастеры для упрощения создания отдельных объектов POJO и файлов сопоставления "с нуля". |
| </p> |
| |
| <p class="notes"><strong>Примечания.</strong></p> |
| <div class="indent"> |
| <ul> |
| |
| <li>При создании нескольких таблиц целесообразно использовать мастер. Однако в этом учебном курсе будет создан только один объект POJO и один файл отображения, поэтому можно создать эти файлы по отдельности. Действия по <a href="#10">созданию объектов POJO и файлов сопоставления по отдельности</a> приведены в конце данного учебного курса.</li> |
| </ul> |
| </div> |
| |
| <div class="indent"> |
| <a name="05a"></a> |
| <h3>Создание файла обратного проектирования</h3> |
| <p>Файл обратного проектирования (<tt>hibernate.reveng.xml</tt>) является файлом XML, который можно использовать для изменения настроек по умолчанию, примененных при создании файлов Hibernate из метаданных базы данных, определенной в <tt>hibernate.cfg.xml</tt>. Мастер создает файл с основными настройками по умолчанию. Можно изменить файл и явным образом указать используемую схему базы данных, отфильтровать таблицы, которые не следует использовать, а также указать, как типы JDBC сопоставляются с типами Hibernate.</p> |
| |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел "Source Packages" и выберите "New > Other" для открытия мастера "New File".</li> |
| <li>В списке "Categories" выберите "Hibernate", а в списке "File Types" выберите "Hibernate Reverse Engineering Wizard". Нажмите кнопку "Далее".</li> |
| <li>Введите имя файла <strong>hibernate.reveng</strong>.</li> |
| <li>В качестве местоположения оставьте значение по умолчанию <strong><tt>src</tt></strong>. Нажмите кнопку "Далее".</li> |
| <li>Выберите элемент <strong>actor</strong> на панели "Available Tables" и нажмите кнопку "Add". Нажмите кнопку "Завершить".</li> |
| </ol> |
| <p>Мастер создает файл обратного проектирования <tt>hibernate.reveng.xml</tt>. Файл обратного проектирования можно закрыть, поскольку его изменение не требуется.</p> |
| |
| |
| |
| <a name="05b"></a> |
| <h3>Создание файлов сопоставления библиотеки Hibernate и объектов POJO на основе базы данных</h3> |
| <p>Мастер создания файлов сопоставления библиотеки Hibernate и объектов POJO на основе базы данных создает файлы на основе таблиц, содержащихся в базе данных. При использовании этого мастера среда IDE создает объекты POJO и файлы отображения на основе таблиц базы данных, указанных в <tt>hibernate.reveng.xml</tt>, а затем добавляет записи отображения в файл <tt>hibernate.cfg.xml</tt>. При применении мастера можно выбрать файлы, которые должны быть созданы в среде IDE (например, только объекты POJO), и установить свойства создания кода (например, создание кода, использующего аннотации EJB 3).</p> |
| |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел "Source Packages" в окне "Projects" и выберите "New > Other" для открытия мастера "New File".</li> |
| <li>Выберите "Hibernate Mapping Files and POJOs from a Database" в категории "Hibernate". Нажмите кнопку "Далее".</li> |
| <li>Выберите файл <tt>hibernate.cfg.xml</tt> из раскрывающегося списка "Hibernate Configuration File", если он еще не выбран.</li> |
| <li>Выберите файл <tt>hibernate.cfg.xml</tt> из раскрывающегося списка "Hibernate Reverse Engineering File", если он еще не выбран.</li> |
| <li>Убедитесь в том, что выбраны пункты <strong>Domain Code</strong> и <strong>Hibernate XML Mappings</strong>.</li> |
| <li>Введите <strong>sakila.entity</strong> в качестве имени пакета в поле "Package". Нажмите кнопку "Завершить".</li> |
| </ol> |
| <img alt="Мастер создания файлов сопоставления Hibernate и POJO" class="margin-around b-all" src="../../../images_www/articles/72/java/hibernate-j2se/mapping-pojos-wizard-ant.png" title="Мастер создания файлов сопоставления Hibernate и POJO" width="600"> |
| <p> |
| После нажатия кнопки "Finish" в среде IDE создается объект POJO <tt>Actor.java</tt> со всеми необходимыми полями и файл сопоставления библиотеки Hibernate; кроме того, в файл <tt>hibernate.cfg.xml</tt> добавляется запись сопоставления. |
| </p> |
| |
| </div> |
| |
| |
| <p> |
| Теперь при наличии объектов POJO и необходимых файлов, связанных с библиотекой Hibernate для приложения можно создать простой внешний графический интерфейс пользователя на Java. Также необходимо создать, а затем добавить запрос HQL, обеспечивающий извлечение данных из базы данных. В рамках этого процесса для построения и тестирования запроса будет использован редактор HQL.</p> |
| |
| <a name="06"></a> |
| <h2>Создание графического интерфейса пользователя приложения</h2> |
| <p>В этом упражнении будет создана простая форма JFrame с определенными полями для ввода и отображения данных. Также будет добавлена кнопка, инициирующая запрос к базе данных для извлечения данных.</p> |
| <p class="tips">При отсутствии знаний об использовании GUI Builder для создания форм можно ознакомиться с учебным курсом <a href="gui-functionality.html">Введение в разработку графического интерфейса</a>. |
| </p> |
| |
| <a name="06a"></a> |
| <div class="indent"> |
| <h3>Создание формы Jframe</h3> |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел проекта в окне "Projects" и выберите "New > Other" для открытия мастера создания файла.</li> |
| <li>Выберите шаблон "JFrame Form" из категории "Swing GUI Forms". Нажмите кнопку "Далее".</li> |
| <li>Введите <strong>DVDStoreAdmin</strong> в поле "Class Name" и <strong>sakila.ui</strong> в поле "Package". Нажмите кнопку "Завершить".</li> |
| </ol> |
| <p>После нажатия кнопки "Готово" в среде IDE создается класс, а в представлении "Дизайн" редактора открывается форма JFrame.</p> |
| |
| <a name="06b"></a> |
| <h3>Добавление элементов к форме</h3> |
| <p>Теперь необходимо добавить элементы пользовательского интерфейса к форме. При открытии формы в режиме проектирования в редакторе в левой части рабочей области среды IDE появляется палитра. Для добавления элемента к форме перетащите элемент с палитры в область формы. После добавления элемента к форме необходимо изменить значение по умолчанию свойства "Variable Name" для этого элемента.</p> |
| |
| <ol> |
| <li>Перетащите элемент "Label" из палитры и измените текст на <strong>Actor Profile</strong>. </li> |
| <li>Перетащите элемент "Label" с палитры и измените текст на <strong>First Name</strong>.</li> |
| <li>Перетащите элемент "Text Field", поместите его рядом с меткой "First Name" и удалите текст по умолчанию.</li> |
| <li>Перетащите элемент "Label" с палитры и измените текст на <strong>Last Name</strong>.</li> |
| <li>Перетащите элемент "Text Field", поместите его рядом с меткой "Last Name" и удалите текст по умолчанию.</li> |
| <li>Перетащите элемент "Button" с палитры и измените текст на <strong>Query</strong>.</li> |
| <li>Перетащите элемент "Table" с палитры в форму.</li> |
| <li>Измените значения "Variable Name" следующих элементов пользовательского интерфейса в соответствии со значениями, приведенными в следующей таблице. |
| <p>Вы можете изменить значение 'Имя переменной' для элемента, щелкнув правой кнопкой мыши элемент в представлении конструктора и выбрав 'Изменить имя переменной'. Кроме того, значение "Variable Name" можно изменить непосредственно в окне "Inspector".</p> |
| <p class="notes">Присвоение значений "Variable Name" элементам "Label" не требуется.</p> |
| |
| <table> |
| <tr> |
| <th class="tblheader" scope="col">Элемент</th><th class="tblheader" scope="col">Имя переменной</th> |
| </tr> |
| <tr> |
| <td class="tbltd1">Текстовое поле "First Name"</td><td class="tbltd1"><tt>firstNameTextField</tt></td> |
| </tr> |
| <tr> |
| <td class="tbltd1">Текстовое поле "Last Name"</td><td class="tbltd1"><tt>lastNameTextField</tt></td> |
| </tr> |
| <tr> |
| <td class="tbltd1">Кнопка "Query"</td><td class="tbltd1"><tt>queryButton</tt></td> |
| </tr> |
| <tr> |
| <td class="tbltd1">Таблица</td><td class="tbltd1"><tt>resultTable</tt></td> |
| </tr> |
| |
| </table> |
| </li> |
| <li>Сохраните изменения.</li> |
| </ol> |
| <p>В режиме проектирования внешний вид формы выглядит так, как показано на следующем рисунке.</p> |
| <img alt="Форма графического интерфейса пользователя в представлении проектирования редактора" class="margin-around b-all" height="481" src="../../../images_www/articles/72/java/hibernate-j2se/hib-jframe-form.png" title="Форма графического интерфейса пользователя в представлении проектирования редактора" width="585"> |
| <p>На этом этапе уже создана форма, и теперь необходимо создать код, обеспечивающий присваивание событий элементам формы. В следующем упражнении будут созданы запросы для извлечения данных на основе языка Hibernate Query Language. После создания запросов к форме будут добавлены методы, обеспечивающие вызов соответствующего запроса при нажатии кнопки "Query".</p> |
| </div> |
| |
| <a name="07"></a> |
| <h2>Создание запроса в редакторе запросов HQL Query Editor</h2> |
| <p>В среде IDE создание и тестирование запросов на основе языка Hibernate Query Language (HQL) может осуществляться с использованием редактора запросов HQL Query Editor. После ввода запроса в редакторе отображается эквивалентный (переведенный) запрос SQL. При нажатии кнопки "Run HQL Query" на панели инструментов в среде IDE запрос выполняется, а результаты отображаются в нижней области редактора. |
| </p> |
| <p>В этом упражнении редактор HQL Editor применяется для создания простых запросов HQL, позволяющих извлекать список подробных данных актеров на основе соответствия имени или фамилии. Перед добавлением запроса к классу редактор HQL Query Editor должен использоваться для проверки правильной работы подключения и корректности результатов запроса. Перед выполнением запроса необходимо скомпилировать приложение.</p> |
| |
| <ol> |
| <li>Правой кнопкой мыши щелкните узел проекта и выберите команду "Построить".</li> |
| <li>Разверните исходный узел пакета <default package> в окне "Projects".</li> |
| <li>Щелкните правой кнопкой мыши файл <tt>hibernate.cfg.xml</tt> и выберите "Run HQL Query" для открытия редактора HQL Editor.</li> |
| <li>Протестируйте подключение путем ввода <tt>from Actor</tt> в редакторе запросов HQL Query Editor. Нажмите кнопку 'Выполнить запрос HQL' ( <img alt="Кнопка 'Выполнить запрос HQL'" height="16" src="../../../images_www/articles/72/java/hibernate-j2se/run_hql_query_16.png" title="Кнопка 'Выполнить запрос HQL'" width="16" /> ) на панели инструментов. |
| <p>При нажатии кнопки "Run HQL Query" результаты запроса должны отображаться в нижней области редактора запросов HQL Query Editor.</p> |
| <img alt="Редактор запросов HQL с отображением результатов запроса HQL" class="margin-around b-all" height="370" src="../../../images_www/articles/72/java/hibernate-j2se/hib-query-hqlresults.png" title="Редактор запросов HQL с отображением результатов запроса HQL" width="585"> |
| </li> |
| <li>Введите следующий запрос в редактор запросов HQL Query Editor и нажмите кнопку "Выполнить запрос HQL" для проверки результатов запроса при вводе значения "PE" в строку поиска. |
| <pre class="examplecode">from Actor a where a.firstName like 'PE%'</pre> |
| <p>Запрос возвращает список подробных данных тех актеров, чьи имена начинаются с символов "PE".</p> |
| <p>При нажатии кнопки "SQL", размещенной над результатами, на экране должен отобразиться соответствующий эквивалентный запрос SQL.</p> |
| <pre class="examplecode">select actor0_.actor_id as col_0_0_ from sakila.actor actor0_ where (actor0_.first_name like 'PE%' )</pre> |
| </li> |
| <li>Откройте новую вкладку редактора HQL Query Editor и введите следующий запрос на панели редактирования. Нажмите кнопку "Run HQL Query". |
| <pre class="examplecode">from Actor a where a.lastName like 'MO%'</pre> |
| <p>Запрос возвращает список подробных данных актеров, чьи фамилии начинаются с символов "МО". |
| </p> |
| </li> |
| </ol> |
| <p>Тестирование запросов показывает, что запросы возвращают требуемые результаты. Теперь необходимо внедрить запросы в приложение и обеспечить вызов соответствующего запроса путем нажатия кнопки "Query" в форме.</p> |
| |
| <a name="08"></a> |
| <h2>Добавление запроса к форме</h2> |
| <p>Теперь необходимо изменить <tt>DVDStoreAdmin.java</tt> для добавления строк запроса и создания методов, позволяющих формировать и вызывать запрос, включающий входные переменные. Также требуется изменить обработчик событий нажатия кнопок для вызова соответствующего запроса и добавить метод, обеспечивающий отображение результатов запроса в таблице.</p> |
| |
| <ol> |
| <li>Откройте <tt>DVDStoreAdmin.java</tt> и выберите вкладку "Source".</li> |
| <li>Добавьте следующие строки запроса (выделенные полужирным шрифтом) к классу. |
| <pre class="examplecode">public DVDStoreAdmin() { |
| initComponents(); |
| } |
| |
| <strong>private static String QUERY_BASED_ON_FIRST_NAME="from Actor a where a.firstName like '"; |
| private static String QUERY_BASED_ON_LAST_NAME="from Actor a where a.lastName like '";</strong></pre> |
| <p class="tips">Запросы можно скопировать из вкладок редактора запросов HQL Query Editor в файл, а затем изменить код.</p> |
| </li> |
| <li>Добавьте следующие методы для создания запроса на основе строки со вводимой пользователем информацией. |
| <pre class="examplecode">private void runQueryBasedOnFirstName() { |
| executeHQLQuery(QUERY_BASED_ON_FIRST_NAME + firstNameTextField.getText() + "%'"); |
| } |
| |
| private void runQueryBasedOnLastName() { |
| executeHQLQuery(QUERY_BASED_ON_LAST_NAME + lastNameTextField.getText() + "%'"); |
| }</pre> |
| <p>Эти методы обеспечивают вызов метода с именем <tt>executeHQLQuery()</tt> и создание запроса путем объединения строки запроса с информацией пользователя, вводимой в строку поиска.</p> |
| </li> |
| <li>Добавьте метод <tt>executeHQLQuery()</tt>. |
| |
| <pre class="examplecode">private void executeHQLQuery(String hql) { |
| try { |
| Session session = HibernateUtil.getSessionFactory().openSession(); |
| session.beginTransaction(); |
| Query q = session.createQuery(hql); |
| List resultList = q.list(); |
| displayResult(resultList); |
| session.getTransaction().commit(); |
| } catch (HibernateException he) { |
| he.printStackTrace(); |
| } |
| }</pre> |
| <p>Метод <tt>executeHQLQuery()</tt> обеспечивает вызов библиотеки Hibernate для выполнения выбранного запроса. В этом методе служебный класс <tt>HibernateUtil.java</tt> применяется для получения объекта Hibernate "Session".</p> |
| </li> |
| <li>Щелкните правой кнопкой мыши в редакторе и выберите 'Исправить выражения импорта' (Ctrl-Shift-I; ⌘-Shift-I в Mac) для создания операторов импорта для библиотек Hibernate (<tt>org.hibernate.Query</tt>, <tt>org.hibernate.Session</tt>) и <tt>java.util.List</tt>. Сохраните изменения.</li> |
| <li>Создайте обработчик событий для кнопки "Query", переключившись в режим проектирования и дважды нажав кнопку "Query". |
| <p>В среде IDE будет создан метод <tt>queryButtonActionPerformed</tt>, который затем отобразится в режиме просмотра исходного кода.</p></li> |
| <li>Измените метод <tt>queryButtonActionPerformed</tt> в режиме просмотра исходного кода путем добавления следующего кода, обеспечивающего выполнение запроса при нажатии кнопки пользователем. |
| |
| <pre class="examplecode">private void queryButtonActionPerformed(java.awt.event.ActionEvent evt) { |
| <strong>if(!firstNameTextField.getText().trim().equals("")) { |
| runQueryBasedOnFirstName(); |
| } else if(!lastNameTextField.getText().trim().equals("")) { |
| runQueryBasedOnLastName(); |
| }</strong> |
| }</pre> |
| </li> |
| <li>Добавьте следующий метод для просмотра результатов в "JTable". |
| <pre class="examplecode">private void displayResult(List resultList) { |
| Vector<String> tableHeaders = new Vector<String>(); |
| Vector tableData = new Vector(); |
| tableHeaders.add("ActorId"); |
| tableHeaders.add("FirstName"); |
| tableHeaders.add("LastName"); |
| tableHeaders.add("LastUpdated"); |
| |
| for(Object o : resultList) { |
| Actor actor = (Actor)o; |
| Vector<Object> oneRow = new Vector<Object>(); |
| oneRow.add(actor.getActorId()); |
| oneRow.add(actor.getFirstName()); |
| oneRow.add(actor.getLastName()); |
| oneRow.add(actor.getLastUpdate()); |
| tableData.add(oneRow); |
| } |
| resultTable.setModel(new DefaultTableModel(tableData, tableHeaders)); |
| }</pre> |
| </li> |
| <li>Щелкните правой кнопкой мыши в редакторе и выберите 'Исправить выражения импорта' (Ctrl-Shift-I; ⌘-Shift-I в Mac) для создания оператора импорта для <tt>java.util.Vector</tt> и <tt>java.util.List</tt>. Сохраните изменения.</li> |
| </ol> |
| |
| <p>После сохранения формы можно запустить проект.</p> |
| |
| <a name="09"></a> |
| <h2>Выполнение проекта</h2> |
| <p>После завершения создания кода можно запустить приложение. Перед выполнением проекта необходимо указать главный класс приложения в диалоговом окне свойств проекта. Если главный класс не указан, при первом запуске приложения отобразится запрос на его установку.</p> |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел проекта в окне "Проекты" и выберите команду "Свойства".</li> |
| <li>Выберите категорию 'Выполнить' в диалоговом окне 'Свойства проекта'.</li> |
| <li>Введите <strong>sakila.ui.DVDStoreAdmin</strong> в поле "Main Class". Нажмите кнопку "ОК". |
| <p>В качестве альтернативы можно нажать кнопку "Browse" и выбрать главный класс в диалоговом окне.</p> |
| <img alt="Установка главного класса в диалоговом окне 'Обзор главных классов'" class="margin-around b-all" height="201" src="../../../images_www/articles/72/java/hibernate-j2se/browse-main-class.png" title="Установка главного класса в диалоговом окне 'Обзор главных классов'" width="339"> |
| </li> |
| <li>Нажмите кнопку "Run Project" на главной панели инструментов для запуска приложения.</li> |
| </ol> |
| |
| <p>Введите информацию в строке поиска для текстовых полей "First Name" или "Last Name" и нажмите кнопку "Query" для поиска актера и просмотра подробных данных. </p> |
| <img alt="Приложение DVDStoreAdmin с отображением результатов" class="margin-around b-all" height="423" src="../../../images_www/articles/72/java/hibernate-j2se/application-run.png" title="Приложение DVDStoreAdmin с отображением результатов" width="575"> |
| <p>При вызове окна "Output" в среде IDE можно просмотреть запрос SQL, инициировавший извлечение представленных результатов.</p> |
| |
| <div class="indent"> |
| <a name="09a"></a> |
| <h3>Загрузка проекта решения</h3> |
| <p>Решение для данного учебного курса в виде проекта можно загрузить несколькими способами.</p> |
| <ul> |
| <li>Загрузите <a href="https://netbeans.org/projects/samples/downloads/download/Samples/Java/DVDStoreAdmin-Ant.zip">архив завершенного проекта в формате zip</a>.</li> |
| <li>Выполните проверку исходных файлов проекта на выходе из примеров NetBeans, выполнив перечисленные ниже действия. |
| <ol> |
| <li>Выберите в главном меню "Группа > Subversion > Проверить".</li> |
| <li>В диалоговом окне "Проверка" введите следующий URL-адрес репозитория:<br /> <tt>https://svn.netbeans.org/svn/samples~samples-source-code</tt><br /> Нажмите кнопку "Далее".</li> |
| <li>Нажмите кнопку "Обзор" для открытия диалогового окна "Обзор папок репозитория".</li> |
| <li>Разверните корневой узел и выберите <strong>samples/java/DVDStoreAdmin-Ant</strong>. Нажмите кнопку "ОК".</li> |
| <li>Укажите локальную папку для исходных файлов (папка должна быть пустой).</li> |
| <li>Нажмите кнопку "Завершить". |
| <p>После нажатия кнопки "Готово" среда IDE инициализирует локальную папку в качестве репозитория Subversion и выполняет проверку исходных файлов проекта на выходе.</p> |
| </li> |
| <li>Щелкните команду "Открыть проект" в диалоговом окне, которое появится после завершения проверки.</li> |
| </ol> |
| <p class="notes"><strong>Примечание.</strong> Для получения исходных файлов на редактирование требуется клиент Subversion. Дополнительные сведения об установке Subversion см. в разделе <a href="../ide/subversion.html#settingUp">Настройка Subversion</a> в <a href="../ide/subversion.html">Руководстве по Subversion в IDE NetBeans</a>.</p> |
| </li> |
| </ul> |
| </div> |
| |
| |
| <a name="10"></a> |
| <h2>Создание объектов POJO и файлов сопоставления по отдельности</h2> |
| <p>Поскольку POJO представляет собой простой класс Java, вы можете использовать мастер создания классов Java, чтобы создать класс, а затем изменить класс в редакторе исходного кода, чтобы добавить необходимые поля и методы получения и установки. После создания объекта POJO мастер также можно использовать для создания файла сопоставления библиотеки Hibernate, обеспечивающего сопоставления класса с таблицей, и добавления информации о сопоставлении в файл <tt>hibernate.cfg.xml</tt>. При создании файла сопоставления "с нуля" необходимо сопоставить поля и столбцы в редакторе XML.</p> |
| |
| <p class="notes"><strong>Примечание.</strong> Это упражнение является необязательным и описывает создание POJO и файла сопоставления, созданных с помощью файлов сопоставления библиотеки Hibernate и POJO из мастера баз данных.</p> |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел "Source Packages" в окне "Projects" и выберите "New > Java Class" для открытия мастера создания класса Java.</li> |
| <li>В мастере введите <b>Actor</b> в качестве имени класса и <b>sakila.entity</b> в качестве имени пакета. Нажмите кнопку "Завершить".</li> |
| <li>Внесите в класс следующие изменения (выделены полужирным шрифтом) для реализации интерфейса "Serializable" и добавьте поля для столбцов таблицы. |
| <pre class="examplecode">public class Actor <b>implements Serializable</b> { |
| <b>private Short actorId; |
| private String firstName; |
| private String lastName; |
| private Date lastUpdate;</b> |
| }</pre> |
| </li> |
| <li>Щелкните правой кнопкой мыши в редакторе и выберите 'Вставить код' (Alt-Insert, Ctrl-I на Mac) и выберите методы получения и установки в контекстном меню для создания методов получения и установки для полей.</li> |
| <li>В диалоговом окне "Generate Getters and Setters" выберите все поля и нажмите кнопку "Generate".<br /> <img alt="Диалоговое окно 'Создание методов получения и установки'" class="margin-around b-all" height="246" src="../../../images_www/articles/72/java/hibernate-j2se/getters-setters.png" title="Диалоговое окно 'Создание методов получения и установки'" width="359"> |
| |
| <p class="tips">В диалоговом окне "Generate Getters and Setters" можно использовать стрелку вверх на клавиатуре для перемещения выбранного элемента к узлу "Actor", а затем нажать клавишу "пробел" и выбрать все поля "Actor".</p></li> |
| <li>Исправьте операторы импорта и сохраните измененные данные.</li> |
| </ol> |
| |
| <p>После создания объекта POJO для таблицы необходимо создать файл сопоставления библиотеки Hibernate для класса <tt>Actor.java</tt>.</p> |
| <ol> |
| <li>Щелкните правой кнопкой мыши узел исходных файлов <tt>sakila.entity</tt> в окне "Projects" и выберите "New > Other" для открытия мастера создания файла "New File".</li> |
| <li>Выберите "Hibernate Mapping File" в категории "Hibernate". Нажмите кнопку "Далее".</li> |
| <li>Введите <strong>Actor.hbm</strong> в поле "File Name" и убедитесь в том, что выбрана папка <b>src/sakila/entity</b>. Нажмите кнопку "Далее".</li> |
| <li>Введите <b>sakila.entity.Actor</b> в поле "Class to Map" и выберите <b>actor</b> из раскрывающегося списка "Database Table". Нажмите кнопку "Завершить".<br /> <img alt="Мастер создания файлов сопоставления Hibernate" class="margin-around b-all" height="272" src="../../../images_www/articles/72/java/hibernate-j2se/mapping-wizard.png" title="Мастер создания файлов сопоставления Hibernate" width="586"> |
| <p>После выбора 'Готово' файл сопоставления Hibernate <tt>Actor.hbm.xml</tt> открывается в редакторе исходного кода. Также в среде IDE выполняется автоматическое добавление записи для ресурса сопоставления в <tt>hibernate.cfg.xml</tt>. В целях просмотра подробных данных разверните узел "Mapping" в режиме проектирования <tt>hibernate.cfg.xml</tt> или в режиме XML. Запись <tt>mapping</tt> в обзоре XML будет выглядеть следующим образом: |
| </p> |
| <pre class="examplecode"> |
| <mapping resource="sakila/entity/Actor.hbm.xml"/> |
| </session-factory> |
| </hibernate-configuration></pre> |
| </li> |
| <li>Сопоставьте поля в <tt>Actor.java</tt> со столбцами в таблице "ACTOR" путем внесения следующих изменений (выделены полужирным шрифтом) в <tt>Actor.hbm.xml</tt>. |
| |
| <pre class="examplecode"><hibernate-mapping> |
| <class name="sakila.entity.Actor" <strong>table="actor"> |
| <id name="actorId" type="java.lang.Short"> |
| <column name="actor_id"/> |
| <generator class="identity"/> |
| </id> |
| <property name="firstName" type="string"> |
| <column length="45" name="first_name" not-null="true"/> |
| </property> |
| <property name="lastName" type="string"> |
| <column length="45" name="last_name" not-null="true"/> |
| </property> |
| <property name="lastUpdate" type="timestamp"> |
| <column length="19" name="last_update" not-null="true"/> |
| </property> |
| </class></strong> |
| </hibernate-mapping></pre> |
| |
| <p class="tips">Для заполнения значений при изменении файла сопоставления можно использовать функцию автозавершения кода.</p> |
| <p class="notes"><b>Примечание.</b> По умолчанию у созданного элемента <tt>class</tt> имеется закрывающий тег. Поскольку элементы свойства необходимо добавить между открывающим и закрывающим тегами элемента <tt>class</tt>, следует внести следующие изменения (выделены полужирным шрифтом). После внесения изменений можно использовать функцию автозавершения кода между тегами <tt>class</tt>.</p> |
| <pre class="examplecode"><hibernate-mapping> |
| <class name="sakila.entity.Actor" <strong>table="actor"> |
| </class></strong> |
| </hibernate-mapping></pre> |
| |
| </li> |
| <li>Нажмите кнопку "Validate XML" на панели инструментов и сохраните изменения.</li> |
| </ol> |
| |
| <p>Создание объектов POJO и файлов сопоставления библиотеки Hibernate может эффективно использоваться для дальнейшей настройки приложения.</p> |
| |
| |
| |
| <div class="feedback-box"><a href="/about/contact_form.html?to=3&subject=Feedback:%20Using%20Hibernate%20in%20a%20Java%20Swing%20Application">Отправить отзыв по этому учебному курсу</a></div> |
| <br style="clear:both;" /> |
| |
| <h2>Дополнительные сведения</h2> |
| <p>Для получения дополнительных сведений о создании приложений с графическим интерфейсом пользователя на базе Swing см. следующие учебные курсы.</p> |
| <ul> |
| <li><a href="quickstart-gui.html">Разработка Swing GUI в IDE NetBeans</a></li> |
| <li><a href="gui-functionality.html">Введение в разработку графического интерфейса </a></li> |
| <li><a href="../../trails/matisse.html">Учебная карта по приложениям с графическим интерфейсом Java </a></li> |
| </ul> |
| |
| |
| </body> |
| </html> |