blob: a04f6fadc9f4b981ff477fd3b2271bf48c705d03 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
-->
<html>
<head>
<title>使用 Hibernate 创建 Maven Swing 应用程序 - NetBeans IDE 教程</title>
<!-- BEGIN METADATA -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<meta name="description" content="Demonstrates how to create a Maven Swing application that uses Hibernate as the persistence layer.">
<meta name="KEYWORDS" content="NetBeans, Maven, Hibernate, Swing, J2SE, Java SE, MySQL, mapping, reveng.xml">
<link rel="stylesheet" href="../../../netbeans.css" type="text/css">
<!-- END METADATA -->
</head>
<body>
<a name="top"></a>
<h1>使用 Hibernate 创建 Maven Swing 应用程序 - NetBeans IDE 教程</h1>
<p>在本教程中,您将使用 NetBeans IDE 通过 Maven 原型创建 Java Swing 应用程序。该应用程序使用 Hibernate 框架作为持久层来检索关系数据库中的 POJO (plain old Java object) 对象。本教程演示了 IDE 中的向导将如何帮助您创建所需的 Hibernate 文件并将 Hibernate 依赖关系添加到 POM。创建 Java 对象并将应用程序配置为使用 Hibernate 后,您将创建一个 GUI 界面,用于搜索并显示数据。
</p>
<p>NetBeans IDE 中完全集成了对 Maven 的支持,并且 Maven 3 已随 IDE 捆绑提供。在新建项目向导中,可以从捆绑的 Maven 原型或者从远程资源库中的原型创建应用程序。使用 Maven 资源库浏览器,可以浏览本地和远程 Maven 资源库,检查工件以及将项目依赖关系添加到项目的 POM 中。
</p>
<p class="tips">要使用 Ant 构建此应用程序,请参见<a href="hibernate-java-se.html">在 Java Swing 应用程序中使用 Hibernate</a></p>
<p class="tips">要构建 Maven Java EE 应用程序,请参见<a href="../javaee/maven-entapp.html">使用 Maven 创建企业应用程序</a></p>
<p><b>目录</b></p>
<img alt="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0" class="stamp" src="../../../images_www/articles/73/netbeans-stamp-80-74-73.png" title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0">
<ul class="toc">
<li><a href="#01">创建数据库</a></li>
<li><a href="#02">配置 Maven</a>
<ul>
<li><a href="#02a">查看 Maven 资源库</a></li>
</ul>
</li>
<li><a href="#03">创建 Maven 应用程序</a>
<ul>
<li><a href="#03b">修改 Maven 项目属性</a></li>
</ul>
</li>
<li><a href="#04">添加 Hibernate 文件和依赖关系</a>
<ul>
<li><a href="#04a">创建 Hibernate 配置文件</a></li>
<li><a href="#04b">修改 Hibernate 配置文件</a></li>
<li><a href="#04c">创建 <tt>HibernateUtil.java</tt> 帮助文件</a></li>
</ul>
</li>
<li><a href="#05">生成 Hibernate 映射文件和 Java 类</a>
<ul>
<li><a href="#05a">通过数据库创建 Hibernate 映射文件和 POJO</a></li>
</ul>
</li>
<li><a href="#06">创建应用程序 GUI</a>
<ul>
<li><a href="#06a">创建 JFrame 窗体</a></li>
<li><a href="#06b">在窗体中添加元素</a></li>
</ul>
</li>
<li><a href="#07">在 HQL 查询编辑器中创建查询</a></li>
<li><a href="#08">在窗体中添加查询</a></li>
<li><a href="#09">运行 Maven 项目</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="http://download.netbeans.org/">NetBeans IDE</a></td>
<td class="tbltd1">7.2、7.3、7.4、8.0、Java 包</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">Java 开发工具包 (JDK)</a></td>
<td class="tbltd1">版本 7 或 8</td>
</tr>
<tr>
<td class="tbltd1"><a href="http://maven.apache.org/">Maven</a></td>
<td class="tbltd1">版本 2.09 或更高</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>在开始本教程之前,您可以先阅读下面这些文档。</p>
<ul>
<li><a href="http://wiki.netbeans.org/MavenBestPractices" target="_blank">Best Practices for Apache Maven in NetBeans 6.x</a>(NetBeans 6.x 中 Apache Maven 的最佳做法)</li>
<li><a href="http://books.sonatype.com/mvnref-book/reference/introduction.html" target="_blank">Chapter 1. Introducing Apache Maven</a>(第 1 章. Apache Maven 简介,来自 <a href="http://books.sonatype.com/mvnex-book/reference/public-book.html" target="_blank">Maven by Example</a>(Maven,按示例))</li>
<li><a href="http://www.hibernate.org/" target="_blank">hibernate.org</a> 上的 Hibernate 文档</li>
<li><a href="gui-functionality.html">构建 GUI 应用程序简介</a></li>
<li><a href="../ide/mysql.html">连接 MySQL 数据库</a>教程</li>
</ul>
<p class="tips">您可以下载<a href="https://netbeans.org/projects/samples/downloads/download/Samples/Java/DVDStoreAdmin-Maven.zip">已完成项目的 zip 档案文件</a></p>
<!-- ++++++++++++++ Creating Database ++++++++++++++ -->
<a name="01"></a>
<h2>创建数据库</h2>
<p>本教程使用名为 <tt>sakila</tt> 的 MySQL 数据库。当您安装 IDE 时,样例数据库并未包括在内,因此您需要先创建数据库才能完成本教程。
</p>
<p>Sakila 数据库是一个免费的样例 MySQL 数据库,可从 MySQL 站点获取。要创建 sakila 数据库,可使用 "Plugins"(插件)管理器下载并安装 "Sakila Sample Database"(Sakila 样例数据库)插件。安装好插件之后,您可以在 "Services"(服务)窗口中创建 sakila 数据库。sakila 数据库已添加到 "Create MySQL Database"(创建 MySQL 数据库)对话框的数据库列表中。</p>
<p>有关配置 IDE 使用 MySQL 的详细信息,请参见<a href="../ide/mysql.html">连接 MySQL 数据库</a>教程。</p>
<ol>
<li>打开 "Plugins"(插件)管理器,并安装 "Sakila Sample Database"(Sakila 样例数据库)插件。</li>
<li>安装插件之后,启动 MySQL 数据库,方法是在 "Services"(服务)窗口中展开 "Databases"(数据库)节点,右键单击 MySQL 服务器节点并选择 "Start"(启动)。</li>
<li>右键单击 MySQL 服务器节点并选择 "Create Database"(创建数据库)。</li>
<li>在 "Create MySQL Database"(创建 MySQL 数据库)对话框的 "New Database Name"(新数据库名称)下拉列表中选择 "Sakila" 数据库。单击 "OK"(确定)。<br /> <img alt="&quot;Create MySQL Database&quot;(创建 MySQL 数据库)对话框的屏幕快照" class="margin-around b-all" height="176" src="../../../images_www/articles/72/java/hibernate-j2se/create-sakila-mysql.png" title="&quot;Create MySQL Database&quot;(创建 MySQL 数据库)对话框的屏幕快照" width="393">
<p>单击 "OK"(确定)后,IDE 将运行脚本以创建 Sakila 数据库,并填充数据库表。您可以在 "Output"(输出)窗口中查看运行脚本的结果。此时,还会在 MySQL 服务器节点下方添加 Sakila 数据库的节点。</p>
<li>右键单击 "Sakila" 节点,然后选择 "Connect"(连接)。</li>
</ol>
<p>单击 "Connect"(连接)后,"Databases"(数据库)节点下面将列出 Sakila 数据库连接节点 (<tt>jdbc:mysql://localhost:3306/sakila [<i>username</i> on Default]</tt>)。打开连接时,可通过展开该连接节点查看数据库中数据。</p>
<!-- ++++++++++++++ Configuring Maven ++++++++++++++ -->
<a name="02"></a>
<h2>配置 Maven</h2>
<p>Maven 与 IDE 捆绑在一起,并在安装 IDE 时进行安装,但如果这是您首次创建 Maven 项目,则需要在 "Options"(选项)窗口中检查 Maven 配置设置。
</p>
<ol>
<li>在 IDE 中打开“选项”窗口(“工具”>“选项”;在 Mac 上为 "NetBeans" >“首选项”)。</li>
<li>在 "Options"(选项)窗口中选择 "Java" 类别,然后单击 "Maven" 标签。</li>
<li>确认指定了 Maven Home 目录。
<p>您可以使用与 IDE 捆绑在一起的 Maven 版本,也可以指定 Maven 在本地的安装位置(要求为 2.0.9 或更高版本)。</p></li>
<li>选择 "OK"(确定)以关闭 "Options"(选项)窗口。</li>
</ol>
<p class="notes"><strong>注:</strong></p>
<ul>
<li>在 IDE 中启用 Java 后,会自动启用 Maven 支持。您将需要启用 Java EE 插件(如果尚未启用)。</li>
<li>在 NetBeans IDE 7.1 和 IDE 的早期版本中,"Options"(选项)窗口的 "Maven" 标签位于 "Miscellaneous"(其他)类别下。</li>
</ul>
<div class="indent">
<a name="02a"></a>
<h3>查看 Maven 资源库</h3>
<p>Maven 用于构建所有项目的工件均存储在本地 Maven 资源库中。如果某一工件被声明为项目依赖关系,则会将其从已注册的某个远程资源库下载到您的本地资源库中。</p>
<p>默认情况下,已注册一些常见的索引 Maven 资源库,并将其列在资源库浏览器中。已注册的资源库包含构建项目所需的大多数公共工件。大多数情况下,无需注册任何其他资源库,除非项目需要使用只包含在专用资源库中的工件。
</p>
<p>在 "Services"(服务)窗口中,可以浏览本地和远程 Maven 资源库和执行即时更新检查。本地或远程资源库中的所有工件都可以作为项目依赖关系进行添加。在 "Service"(服务)窗口中,可以展开 "Local repository"(本地资源库)节点以查看本地存在的工件。远程资源库节点下列出的工件可以作为项目依赖关系进行添加,但并非所有这些工件都在本地存在。仅当这些工件声明为项目依赖关系时,才会将其添加到本地资源库。</p>
<p>要浏览和更新 Maven 资源库,请执行以下步骤。</p>
<ol>
<li>选择 "Window"(窗口)> "Services"(服务)以打开 "Services"(服务)窗口。</li>
<li>在 "Services"(服务)窗口中展开 "Maven Repositories"(Maven 资源库)节点以查看资源库。</li>
<li>展开资源库节点以查看工件。</li>
<li>右键单击资源库节点并在弹出菜单中选择 "Update Index"(更新索引)以更新资源库。</li>
</ol>
<img alt="&quot;Services&quot;(服务)窗口中的 &quot;Maven Repositories&quot;(Maven 资源库)的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/maven-create-se/maven-repositories.png" title="&quot;Services&quot;(服务)窗口中的 &quot;Maven Repositories&quot;(Maven 资源库)">
<p>当将光标置于某个工件上时,IDE 将显示包含其坐标的工具提示。可以双击工件的 JAR 文件以查看有关该工件的其他详细信息。</p>
<p class="tips">在 "Services"(服务)窗口中右键单击 "Maven Repositories"(Maven 资源库)并选择 "Find"(查找)可搜索工件。</p>
<p class="tips">有关管理 Maven 类路径依赖关系和在 IDE 中使用 Maven 资源库的详细信息,请参见 <a href="http://wiki.netbeans.org/MavenBestPractices#section-MavenBestPractices-DependencyManagement">NetBeans IDE 中的 Apache Maven 最佳做法</a><a href="http://wiki.netbeans.org/MavenBestPractices">依赖关系管理</a>部分。
</p>
<p class="notes"><strong>NetBeans IDE 7.1 和 IDE 较早版本的注释。</strong></p>
<ul>
<li>选择 "Window"(窗口)> "Other"(其他)> "Maven Repositories Browser"(Maven 资源库浏览器)以查看 Maven 资源库。</li>
<li>可以使用 Maven 资源库浏览器的工具栏中的按钮来更新索引和搜索工件。</li>
</ul>
</div>
<a name="03"></a>
<h2>创建 Maven 应用程序</h2>
<p>在本教程中,您将创建一个简单的 Java Swing 应用程序项目 DVDStoreAdmin。您将通过某个捆绑的 Maven 原型创建项目,然后修改默认项目设置。</p>
<div class="indent">
<a name="03a"></a>
<h3>选择原型</h3>
<p>使用新建项目向导可以通过 Maven 原型创建 Maven 项目。IDE 包含一些常用 NetBeans 项目类型的原型,但是您也可以在该向导中找到并选择远程资源库中的原型。</p>
<ol>
<li>从主菜单中选择 "File"(文件)> "New Project"(新建项目)(Ctrl-Shift-N 组合键;在 Mac 上为 ⌘-Shift-N 组合键),以打开新建项目向导。 </li>
<li>从 "Maven" 类别中选择 "Java Application"(Java 应用程序)。单击 "Next"(下一步)。<br> <img alt="新建项目向导中的 &quot;Maven Archetypes&quot;(Maven 原型)的屏幕截图" class="margin-around b-all" src="../../../images_www/articles/72/java/maven-create-se/maven-project-wizard.png" title="新建项目向导中的 &quot;Maven Archetypes&quot;(Maven 原型)"></li>
<li>键入 <strong>DVDStoreAdmin</strong> 作为项目名称并设置项目位置。</li>
<li>修改默认的组 ID 和版本(可选)。
<p>构建项目时,组 ID 和版本将作为工件在本地资源库中的坐标使用。</p></li>
<li>单击 "Finish"(完成)。</li>
</ol>
<p>单击 "Finish"(完成)后,IDE 将创建 Maven 项目并在 "Projects"(项目)窗口中打开该项目。IDE 将自动在 <tt>com.mycompany.dvdstoreadmin</tt> 包中创建类 <tt>App.java</tt>。您可以删除 <tt>App.java</tt>,因为应用程序不需要使用该类。</p>
<p class="notes"><strong>注:</strong>如果这是首次创建 Maven 项目,则 Maven 需要将一些必需的插件和工件下载到本地资源库中。这可能会花费一些时间。
</p>
<a name="03b"></a>
<h3>修改项目属性</h3>
<p>使用向导创建 Maven 项目时,默认项目属性是基于原型的。在某些情况下,您可能需要根据自己所用的系统及项目的要求对默认属性进行修改。例如,对于本项目,由于项目使用标注,因此您需要确认将源代码级别设置为 1.5 或更高版本。</p>
<ol>
<li>右键单击项目节点,然后选择 "Properties"(属性)。</li>
<li>在 "Properties"(属性)窗口中选择 "Sources"(源)类别。</li>
<li>确认在下拉列表中选择的 "Source/Binary Format"(源代码/二进制格式)为 1.5 或更高版本。</li>
<li>从 "Encoding"(编码)属性的下拉列表中选择 "UTF-8"。单击 "OK"(确定)。 </li>
</ol>
</div>
<a name="04"></a>
<h2>添加 Hibernate 文件和依赖关系</h2>
<p>要添加对 Hibernate 的支持,您需要使 Hibernate 库可用,方法是在 POM 中将所需工件声明为依赖关系。IDE 提供的向导可以帮助您创建在项目中需要的 Hibernate 文件。您可以使用 IDE 中的向导来创建 Hibernate 配置文件和实用程序帮助类。如果您使用向导创建 Hibernate 配置文件,IDE 将自动更新 POM,以将 Hibernate 依赖关系添加到项目中。</p>
<p>您可以在 "Projects"(项目)窗口中将依赖关系添加到项目,也可以直接编辑 <tt>pom.xml</tt>。要在 "Projects"(项目)窗口中添加依赖关系,请右键单击 "Projects"(项目)窗口中的 "Dependencies"(依赖关系)节点,然后从弹出菜单中选择 "Add Dependency"(添加依赖关系)以打开 "Add Dependency"(添加依赖关系)对话框。添加依赖关系时,IDE 将更新 POM 并将本地尚不存在的任何所需工件下载到本地资源库。</p>
<p>要直接编辑 <tt>pom.xml</tt>,请在 "Projects"(项目)窗口中展开 "Project Files"(项目文件)节点,然后双击 <tt>pom.xml</tt> 以打开该文件。
</p>
<a name="04a"></a>
<div class="indent">
<h3>创建 Hibernate 配置文件</h3>
<p>Hibernate 配置文件 (<tt>hibernate.cfg.xml</tt>) 包含关数据库连接、资源映射和其他连接属性的信息。在使用向导创建 Hibernate 配置文件时,您可以从 IDE 的注册数据库连接列表中选择数据库连接。生成配置文件时,IDE 会根据所选的数据库连接自动添加连接详细信息和方言信息。IDE 还会自动修改 POM 以添加所需的 Hibernate 依赖关系。创建配置文件之后,您可以使用多视图编辑器来编辑文件,也可以直接在 XML 编辑器中编辑 XML 文件。</p>
<ol>
<li>右键单击 "Services"(服务)窗口中的 Sakila 数据库连接,然后选择 "Connect"(连接)。</li>
<li>在 "Projects"(项目)窗口中右键单击 "Source Packages"(源包)节点,并选择 "New"(新建)> "Other"(其他)以打开新建文件向导。</li>
<li>从 "Hibernate" 类别中选择 Hibernate 配置向导。单击 "Next"(下一步)。</li>
<li>保留默认文件名 (<tt>hibernate.cfg</tt>)。</li>
<li>单击 "Browse"(浏览)并指定 <tt>src/main/resources</tt> 目录作为位置(如果尚未指定)。单击 "Next"(下一步)。</li>
<li>在 "Database Connection"(数据库连接)下拉列表中,选择 sakila 连接。单击 "Finish"(完成)。</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"(完成)后,IDE 在编辑器中打开 <tt>hibernate.cfg.xml</tt>。配置文件包含关于单一数据库的信息。
</p>
<p>如果在 "Projects"(项目)窗口中展开 "Dependencies"(依赖关系)节点,则可以看到 IDE 已添加了所需的 Hibernate 工件。IDE 会在 "Dependencies"(依赖关系)节点下列出编译项目所需的所有直接依赖关系和传递依赖关系。作为直接依赖关系(项目的 POM 中指定的依赖关系)的工件以彩色 JAR 图标表示。作为传递依赖关系的工件(该工件是一个或多个直接依赖关系的依赖关系)以灰色显示。 </p>
<img alt="&quot;Projects&quot;(项目)窗口中的 &quot;Libraries&quot;(库)节点下依赖关系的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/80/java/maven-create-se/maven-project-libs.png" title="&quot;Projects&quot;(项目)窗口中的 &quot;Libraries&quot;(库)节点下的依赖关系">
<p>通过右键单击某个 JAR 并选择 "View Artifact Details"(查看工件详细信息),可以查看工件的详细信息。工件查看器包含一些标签,其中提供了有关选定工件的详细信息。例如,"Basic"(基本)标签提供了有关工件坐标和可用版本的详细信息。"Graph"(图形)标签提供了选定工件的依赖关系的可视表示。</p>
<img alt="显示依赖关系的 &quot;Graphs&quot;(图形)标签或工件查看器的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/maven-create-se/maven-artifacts-viewer.png" title="显示依赖关系的 &quot;Graphs&quot;(图形)标签或工件查看器">
<p class="tips">您也可以使用 "Graph"(图形)标签发现并解决依赖关系间的版本冲突问题。</p>
<a name="04b"></a>
<h3>修改 Hibernate 配置文件</h3>
<p>在本练习中,您将编辑 <tt>hibernate.cfg.xml</tt> 中指定的默认属性来启用 SQL 语句的调试日志记录。本练习为可选。</p>
<ol>
<li>在 "Design"(设计)标签中打开 <tt>hibernate.cfg.xml</tt>。可以通过展开 "Projects"(项目)窗口的 "Configuration Files"(配置文件)节点并双击 <tt>hibernate.cfg.xml</tt> 来打开该文件。</li>
<li>在 "Optional Properties"(可选属性)下,展开 "Configuration Properties"(配置属性)节点。</li>
<li>单击 "Add"(添加)以打开 "Add Hibernate Property"(添加 Hibernate 属性)对话框。</li>
<li>在此对话框中,选择 <tt>hibernate.show_sql</tt> 属性并将值设置为 <tt>true</tt>。单击 "OK"(确定)。这将启用 SQL 语句的调试日志记录。<br /> <img alt="&quot;Add Hibernate Property&quot;(添加 Hibernate 属性)对话框,hibernate.show_sql 属性" class="margin-around b-all" height="161" src="../../../images_www/articles/72/java/hibernate-j2se/add-property-showsql.png" title="显示 hibernate.show_sql 属性的设置值的 &quot;Add Hibernate Property&quot;(添加 Hibernate 属性)对话框" width="392"></li>
<li>单击 "Miscellaneous Properties"(其他属性)节点下的 "Add"(添加),然后选择 "Property Name"(属性名称)下拉列表中的 <tt>hibernate.query.factory_class</tt></li>
<li>在文本字段中键入 <strong>org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</strong>。单击 "OK"(确定)。
<p class="notes"><strong>注:</strong>不要从下拉列表中选择值。</p>
<img alt="属性 hibernate.query.factory_class 的 &quot;Add Hibernate Property&quot;(添加 Hibernate 属性)对话框" class="margin-around b-all" src="../../../images_www/articles/80/web/hibernate-webapp/add-property-factoryclass-4.png" title="显示 hibernate.query.factory_class 属性的设置值的 &quot;Add Hibernate Property&quot;(添加 Hibernate 属性)对话框">
<p>如果单击编辑器中的 XML 标签,则可以在 XML 视图中看到此文件。您的文件应看起来类似于以下内容:</p>
<pre class="examplecode">&lt;hibernate-configuration&gt;
&lt;session-factory name="session1"&gt;
&lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;
&lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;
&lt;property name="hibernate.connection.url"&gt;jdbc:mysql://localhost:3306/sakila&lt;/property&gt;
&lt;property name="hibernate.connection.username"&gt;root&lt;/property&gt;
&lt;property name="hibernate.connection.password"&gt;######&lt;/property&gt;
&lt;property name="hibernate.show_sql"&gt;true&lt;/property&gt;
&lt;property name="hibernate.query.factory_class"&gt;org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory&lt;/property&gt;
&lt;/session-factory&gt;
&lt;/hibernate-configuration&gt;</pre>
</li>
<li>保存对该文件所做的更改。</li>
</ol>
<p>运行项目时,您将能够在 IDE 的 "Output"(输出)窗口中看到输出的 SQL 查询。</p>
<a name="04c"></a>
<h3>创建 <tt>HibernateUtil.java</tt> 帮助文件</h3>
<p>要使用 Hibernate,您需要创建一个 helper 类,该类处理启动并访问 Hibernate 的 <tt>SessionFactory</tt> 以获取 "Session"(会话)对象。该类将调用 Hibernate 的 <tt>configure()</tt> 方法,加载 <tt>hibernate.cfg.xml</tt> 配置文件,然后构建 <tt>SessionFactory</tt> 来获取会话对象。
</p>
<p>在此部分,使用新建文件向导创建 helper 类 <tt>HibernateUtil.java</tt></p>
<ol>
<li>右键单击 "Source Packages"(源包)节点并选择 "New"(新建)> "Other"(其他),打开新建文件向导。</li>
<li>从 "Categories"(类别)列表中选择 "Hibernate",从 "File Types"(文件类型)列表中选择 HibernateUtil.java。单击 "Next"(下一步)。</li>
<li>键入 <strong>HibernateUtil</strong> 作为类名,并键入 <strong>sakila.util</strong> 作为包名。单击 "Finish"(完成)。</li>
</ol>
<img alt="创建 Hibernate 实用程序向导的屏幕快照" class="margin-around b-all" src="../../../images_www/articles/72/java/hibernate-j2se/maven-hibutil-wizard.png" title="Hibernate 实用程序向导" width="600">
<p>单击 "Finish"(完成),此时 <tt>HibernateUtil.java</tt> 将在编辑器中打开。由于不需要编辑该文件,因此可以关闭该文件。</p>
</div>
<a name="05"></a>
<h2>生成 Hibernate 映射文件和 Java 类</h2>
<p>在本教程中,您将使用 POJO <tt>Actor.java</tt> 表示数据库中的 ACTOR 表的数据。该类为表中的列指定字段并使用简单的 setter 和 getter 检索和编写数据。要将 <tt>Actor.java</tt> 映射到 ACTOR 表,您可以使用 Hibernate 映射文件或使用类中的注释。</p>
<p>您可以使用逆向工程向导和 "Hibernate Mapping Files and POJOs from a Database"(通过数据库生成 Hibernate 映射文件和 POJO)向导,基于所选的数据库表创建多个 POJO 和映射文件。或者,也可以使用 IDE 中的相应向导帮助您从头创建各个 POJO 和映射文件。
</p>
<p class="notes"><strong>注:</strong>要为多个表创建文件时,您很可能希望使用这些向导。在本教程中,您只需创建一个 POJO 和一个映射文件,因此单独创建各文件相当简单。本教程的末尾介绍了<a href="#10">单独创建 POJO 和映射文件</a>的步骤。</p>
<div class="indent">
<a name="05a"></a>
<h3>创建逆向工程文件</h3>
<p>要使用通过数据库生成 POJO 和映射文件向导,您需要首先在 <tt>src/main/resources</tt> 目录(在其中创建了 <tt>hibernate.cfg.xml</tt>)中创建 <tt>reveng.xml</tt> 逆向工程文件。
</p>
<ol>
<li>右键单击 "Source Packages"(源包)节点并选择 "New"(新建)> "Other"(其他),打开新建文件向导。</li>
<li>从 "Categories"(类别)列表中选择 "Hibernate",然后从 "File Types"(文件类型)列表中选择 Hibernate 逆向工程向导。单击 "Next"(下一步)。</li>
<li>键入 <strong>hibernate.reveng</strong> 作为文件名。</li>
<li>指定 <strong><tt>src/main/resources</tt></strong> 作为位置。单击 "Next"(下一步)。</li>
<li>在 "Available Tables"(可用表)窗格中选择 <strong>actor</strong>,然后单击 "Add"(添加)。单击 "Finish"(完成)。</li>
</ol>
<p>该向导将生成 <tt>hibernate.reveng.xml</tt> 逆向工程文件。可将该逆向工程文件关闭,因为无需对其进行编辑。</p>
<p class="notes"><strong>注:</strong>此项目需要 MySQL 连接器 jar 库(例如,<tt>mysql-connector-jar-5.1.13.jar</tt>)。如果在 "Dependencies"(依赖关系)节点下面未将适当的 JAR 作为项目依赖关系列出,则可以右键单击 "Dependencies"(依赖关系)节点并选择 "Add Dependency"(添加依赖关系)以添加依赖关系。</p>
<h3>通过数据库创建 Hibernate 映射文件和 POJO</h3>
<p>"Hibernate Mapping Files and POJOs from a Database"(通过数据库生成 Hibernate 映射文件和 POJO)向导生成基于数据库表的文件。使用该向导时,IDE 将基于 <tt>hibernate.reveng.xml</tt> 中指定的数据库表生成 POJO 和映射文件,然后将映射条目添加到 <tt>hibernate.cfg.xml</tt>。使用向导时可选择希望 IDE 生成的文件(比如,只生成 POJO)并选择代码生成选项(例如,生成使用 EJB 3 标注的代码)。</p>
<ol>
<li>在 "Projects"(项目)窗口中右键单击 "Source Packages"(源包)节点,并选择 "New"(新建)> "Other"(其他)以打开新建文件向导。</li>
<li>在 "Hibernate" 类别中选择 "Hibernate Mapping Files and POJOs from a Database"(通过数据库生成 Hibernate 映射文件和 POJO)。单击 "Next"(下一步)。</li>
<li>从 "Hibernate Configuration File"(Hibernate 配置文件)下拉列表中选择 <tt>hibernate.cfg.xml</tt>(如果未将其选定)。</li>
<li>从 "Hibernate Reverse Engineering File"(Hibernate 逆向工程文件)下拉列表中选择 <tt>hibernate.reveng.xml</tt>(如果未将其选定)。</li>
<li>确保选中了 <strong>Domain Code</strong>(域代码)和 <strong>Hibernate XML Mappings</strong>(Hibernate XML 映射)选项。</li>
<li>键入 <strong>sakila.entity</strong> 作为包名。单击 "Finish"(完成)。</li>
</ol>
<img alt="&quot;Generate Hibernate Mapping Files and POJOs&quot;(生成 Hibernate 映射文件和 POJO)向导" class="margin-around b-all" src="../../../images_www/articles/72/java/hibernate-j2se/mapping-pojos-wizard.png" title="&quot;Generate Hibernate Mapping Files and POJOs&quot;(生成 Hibernate 映射文件和 POJO)向导" width="600">
<p>
单击 "Finish"(完成),此时 IDE 将在 <tt>src/main/java/sakila/entity</tt> 目录中生成包含所有必需字段的 POJO <tt>Actor.java</tt>。IDE 还会在 <tt>src/main/resources/sakila/entity</tt> 目录中生成 Hibernate 映射文件,并将映射条目添加到 <tt>hibernate.cfg.xml</tt>
</p>
</div>
<p>
您已经创建了 POJO 和所需的 Hibernate 相关文件,现在,您可以为应用程序创建一个简单的 Java GUI 前端。您还将创建并添加一个 HQL 查询,用于查询数据库以检索数据。在此过程中,我们还将使用 HQL 编辑器来构建和测试查询。</p>
<a name="06"></a>
<h2>创建应用程序 GUI</h2>
<p>在本练习中,您将创建一个简单的 JFrame 窗体,并添加一些字段用于输入和显示数据。您还将添加一个按钮,用于触发检索数据的数据库查询。</p>
<p class="tips">如果您不知道如何使用 GUI 构建器创建窗体,可以阅读<a href="gui-functionality.html">构建 GUI 应用程序简介</a>教程。
</p>
<a name="06a"></a>
<div class="indent">
<h3>创建 JFrame 窗体</h3>
<ol>
<li>在 "Projects"(项目)窗口中右键单击项目节点,然后选择 "New"(新建)> "Other"(其他)以打开新建文件向导。</li>
<li>从 "Swing GUI Forms"(Swing GUI 窗体)类别中选择 "JFrame Form"(JFrame 窗体)。单击 "Next"(下一步)。</li>
<li>键入 <strong>DVDStoreAdmin</strong> 作为类名,并键入 <strong>sakila.ui</strong> 作为包名。单击 "Finish"(完成)。</li>
</ol>
<p>单击 "Finish"(完成),此时 IDE 将创建类并在编辑器的 "Design"(设计)视图中打开 JFrame 窗体。</p>
<a name="06b"></a>
<h3>在窗体中添加元素</h3>
<p>现在,您需要在窗体中添加 UI 元素。在编辑器中的 "Design"(设计)视图中打开窗体后,"Palette"(组件面板)出现在 IDE 的右侧。在窗体中添加元素的方法是将 "Palette"(组件面板)中的元素拖至窗体区域。将元素添加到窗体之后,您需要修改元素 "Variable Name"(变量名称)属性的默认值。</p>
<ol>
<li>从 "Palette"(组件面板)中拖出一个 "Label"(标签)元素,并将文本更改为 <strong>Actor Profile</strong></li>
<li>从 "Palette"(组件面板)中拖出一个 "Label"(标签)元素,并将文本更改为 <strong>First Name</strong></li>
<li>拖放一个 "Text Field"(文本字段)元素到 "First Name" 标签旁边,并删除默认文本。
<p>删除默认文本后,文本字段将折叠起来。您可以稍后调整文本字段的大小,以调整窗体元素的对齐方式。</p></li>
<li>从 "Palette"(组件面板)中拖出一个 "Label"(标签)元素,并将文本更改为 <strong>Last Name</strong></li>
<li>拖放一个 "Text Field"(文本字段)元素到 "Last Name" 标签旁边,并删除默认文本。</li>
<li>从 "Palette"(组件面板)中拖出一个 "Button"(按钮)元素,并将文本更改为 <strong>Query</strong></li>
<li>从 "Palette"(组件面板)中拖放一个 "Table"(表)元素到窗体中。</li>
<li>根据下表中的值更改以下 UI 元素的 "Variable Name"(变量名称)值。
<p>您可以更改元素的 "Variable Name"(变量名称)值,方法是右键单击 "Design"(设计)视图中的元素并选择 "Change Variable Name"(更改变量名称)。或者,您可以直接在 "Inspector"(检查器)窗口中更改变量名称。</p>
<p class="notes">您不需要为 "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>调整文本字段的大小并对齐窗体元素。
<p>您可以对文本字段启用 "Horizontal Resizable"(可水平调整大小)属性,以确保文本字段的大小可随窗口进行调整且元素间距保持不变。</p></li>
<li>保存所做的更改。</li>
</ol>
<p>在 "Design"(设计)视图中,您的窗体应与下图类似。</p>
<img alt="编辑器设计视图中的 GUI 窗体" class="margin-around b-all" height="481" src="../../../images_www/articles/72/java/hibernate-j2se/hib-jframe-form.png" title="编辑器设计视图中的 GUI 窗体" width="585">
<p>现在,您已经创建了窗体。接下来,您需要创建为窗体元素指定活动的代码。在下一练习中,您将根据 Hibernate 查询语言构建查询来检索数据。构建查询之后,您将在窗体中添加一些方法,用于在单击 "Query" 按钮时调用适当的查询。</p>
</div>
<a name="07"></a>
<h2>在 HQL 查询编辑器中创建查询</h2>
<p>在 IDE 中,您可以使用 HQL 查询编辑器根据 Hibernate 查询语言来构建和测试查询。键入查询时,编辑器将显示等价的(经过转换的)SQL 查询。单击工具栏中的 "Run HQL Query"(运行 HQL 查询)按钮后,IDE 将执行查询并在编辑器底部显示结果。
</p>
<p>在本练习中,您将使用 HQL 编辑器构建简单的 HQL 查询,用于根据姓氏和名字查询演员的详细信息。将查询添加到类中之前,您需要使用 HQL 查询编辑器测试连接运行正常,且查询生成了预期的结果。在运行该查询之前,您首先需要对应用程序进行编译。</p>
<ol>
<li>右键单击项目节点,然后选择 "Build"(构建)。
<p>单击 "Build"(构建)后,IDE 会将所需的工件下载到您本地的 Maven 资源库。</p></li>
<li>在 "Projects"(项目)窗口中的 "Other Sources"(其他源)节点下展开 <tt>&lt;默认包></tt> 源包节点。</li>
<li>右键单击 <tt>hibernate.cfg.xml</tt> 配置文件,然后选择 "Run HQL Query"(运行 HQL 查询)以打开 HQL 编辑器。</li>
<li>通过在 HQL 查询编辑器中键入 <tt>from Actor</tt> 来测试连接。单击工具栏中的 "Run HQL Query"(运行 HQL 查询)按钮 (<img alt="&quot;Run HQL Query&quot;(运行 HQL 查询)按钮" height="16" src="../../../images_www/articles/72/java/hibernate-j2se/run_hql_query_16.png" title="&quot;Run HQL Query&quot;(运行 HQL 查询)按钮" width="16" />)。
<p>单击 "Run HQL Query"(运行 HQL 查询)按钮之后,您应该能在 HQL 查询编辑器的底部窗格中看到查询结果。</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 查询编辑器中键入以下查询,然后单击 "Run HQL Query"(运行 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 查询编辑器标签,在编辑器窗格中键入以下查询。单击 "Run HQL Query"(运行 HQL 查询)按钮。
<pre class="examplecode">from Actor a where a.lastName like 'MO%'</pre>
<p>该查询返回名字以 'MO' 开头的演员详细信息列表。
</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 查询编辑器标签中的查询复制到文件中,然后再修改代码。</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 会话。</p>
</li>
<li>修复您的导入,为 Hibernate 库(<tt>org.hibernate.Query</tt>, <tt>org.hibernate.Session</tt>)和 <tt>java.util.List</tt> 添加导入语句。</li>
<li>切换到 "Design"(设计)视图并双击 "Query" 按钮,创建一个 "Query" 按钮事件处理程序。
<p>IDE 将创建 <tt>queryButtonActionPerformed</tt> 方法并在 "Source"(源)视图中显示该方法。</p></li>
<li>在 "Source"(源)视图中修改 <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&lt;String&gt; tableHeaders = new Vector&lt;String&gt;();
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&lt;Object&gt; oneRow = new Vector&lt;Object&gt;();
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 组合键)以添加 <tt>java.util.Vector</tt>,然后保存所做的更改。</li>
</ol>
<p>保存窗体之后,您可以运行项目。</p>
<!-- Running a Maven Project -->
<a name="09"></a>
<h2>运行 Maven 项目</h2>
<p>
现在您已完成了编码工作,接下来可以构建项目并启动应用程序了。在 IDE 中构建 Maven 项目时,Maven 将读取项目的 POM 以识别项目依赖关系。要构建项目,指定为依赖关系的所有工件都必须位于本地 Maven 资源库中。如果某个所需的工件不在本地资源库中,Maven 将先从远程资源库中检出该工件,然后再尝试构建并运行项目。构建项目后,Maven 会将构建的二进制文件作为工件安装到本地资源库中。
</p>
<p class="notes"><strong>注:</strong></p>
<div class="indent">
<ul>
<li>如果 IDE 需要检出任何项目依赖关系,则首次构建并运行项目可能要花费一些时间。之后的构建过程将会加快。</li>
<li>要运行此应用程序,首先需要指定“主类”。</li>
</ul>
</div>
<p>要编译并启动此应用程序,请执行以下任务。</p>
<ol>
<li>右键单击 "Projects"(项目)窗口中的项目节点,然后选择 "Properties"(属性)。</li>
<li>在 "Project Properties"(项目属性)对话框中选择 "Run"(运行)类别。</li>
<li>键入 <strong>sakila.ui.DVDStoreAdmin</strong> 作为主类。单击 "OK"(确定)。
<p>或者,您可以单击 "Browse"(浏览)按钮并在对话框中选择主类。</p>
<img alt="在 &quot;Browse Main Classes&quot;(浏览主类)对话框中设置主类" class="margin-around b-all" height="201" src="../../../images_www/articles/72/java/hibernate-j2se/browse-main-class.png" title="在 &quot;Browse Main Classes&quot;(浏览主类)对话框中设置主类" width="339">
</li>
<li>单击主工具栏中的 "Run Project"(运行项目)以启动应用程序。</li>
</ol>
<p>在 IDE 中对 Maven 项目调用 "Run"(运行)操作时,IDE 将运行与 "Run"(运行)操作关联的 Maven 目标。IDE 具有绑定到 IDE 操作的默认目标,这些目标依据项目包而定。在项目 "Properties"(属性)窗口的 "Actions"(操作)窗格中,可以查看绑定到 "Run"(运行)操作的目标。</p>
<img alt="DVDStoreAdmin 项目属性窗口的 &quot;Actions&quot;(操作)窗格" class="margin-around b-all" src="../../../images_www/articles/72/java/hibernate-j2se/maven-projectproperties.png" title="DVDStoreAdmin 项目属性窗口的 &quot;Actions&quot;(操作)窗格" width="600">
<p class="tips">在项目 "Properties"(属性)窗口的 "Actions"(操作)窗格中,可以定制操作的绑定目标。</p>
<p>启动应用程序时,GUI 窗体打开。在 "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>如果您查看 IDE 的 "Output"(输出)窗口,您可以看到检索显示结果的 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-Maven.zip">已完成项目的 zip 档案文件</a></li>
<li>通过执行以下步骤从 NetBeans 样例检出项目源代码:
<ol>
<li>从主菜单中选择 "Team"(团队开发)> "Subversion" > "Checkout"(检出)。</li>
<li>在 "Checkout"(检出)对话框中,输入以下资源库 URL:<br /> <tt>https://svn.netbeans.org/svn/samples~samples-source-code</tt><br /> 单击 "Next"(下一步)。</li>
<li>单击 "Browse"(浏览)以打开 "Browse Repostiory Folders"(浏览资源库文件夹)对话框。</li>
<li>展开根节点,然后选择 <strong>samples/java/DVDStoreAdmin-Maven</strong>。单击 "OK"(确定)。</li>
<li>指定用于存储源代码的本地文件夹(本地文件夹必须为空)。</li>
<li>单击 "Finish"(完成)。
<p>单击 "Finish"(完成),此时 IDE 会将本地文件夹初始化为 Subversion 资源库,并检出项目源代码。</p>
</li>
<li>在完成检出操作后将会显示一个对话框,在该对话框中单击 "Open Project"(打开项目)。</li>
</ol>
<p class="notes"><strong>注:</strong></p>
<ul>
<li>从 Kenai 检出源代码的步骤仅适用于 NetBeans IDE 6.7 和 6.8。</li>
<li>需要 Subversion 客户端以从 Kenai 检出源代码。有关安装 Subversion 的更多信息,请参见 <a href="../ide/subversion.html">NetBeans IDE 中的 Subversion 指南</a>中有关<a href="../ide/subversion.html#settingUp">设置 Subversion</a> 的部分。</li>
</ul>
</li>
</ul>
</div>
<a name="10"></a>
<h2>单独创建 POJO 和映射文件</h2>
<p>由于 POJO 是一个简单的 Java 类,因此您可以使用新建 Java 类向导创建类,然后在源代码编辑器中编辑该类,添加必要的字段以及 getter 和 setter 方法。创建 POJO 之后,您可以使用相应的向导创建一个将类映射到表的 Hibernate 映射文件,并将映射信息添加到 <tt>hibernate.cfg.xml</tt>。从头开始创建映射文件时,您需要在 XML 编辑器中将字段映射到列。</p>
<p class="notes"><strong>注:</strong>此练习是可选的,说明了如何使用 "Hibernate Mapping Files and POJOs from Database"(通过数据库生成 Hibernate 映射文件和 POJO)向导创建 POJO 和映射文件。</p>
<ol>
<li>右键单击 "Projects"(项目)窗口中的 "Source Packages"(源包)节点并选择 "New"(新建)> "Java Class"(Java 类)以打开新建 Java 类向导。</li>
<li>在该向导中,键入<b>类名</b>作为类名,键入 <b>sakila.entity</b> 作为包名。单击 "Finish"(完成)。</li>
<li>对类进行以下更改(显示为粗体)以实现“可串行化”接口并为表列添加字段。
<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>为字段生成 getter 和 setter 方法,方法是将光标放置在源代码编辑器中,按下 Alt-Insert 并选择 "Getter and Setter"(Getter 和 Setter)。</li>
<li>在 "Generate Getters and Setters"(生成 Getter 和 Setter)对话框中,选择所有字段并单击 "Generate"(生成)。<br /> <img alt="&quot;Generate Getters and Setters&quot;(生成 getter 和 setter)对话框" class="margin-around b-all" height="246" src="../../../images_www/articles/72/java/hibernate-j2se/getters-setters.png" title="&quot;Generate Getters and Setters&quot;(生成 getter 和 setter)对话框" width="359">
<p class="tips">在 "Generate Getters and Setters"(生成 Getter 和 Setter)对话框中,您可以使用键盘中的向上箭头将所选项目移动到 Actor 节点中,然后按空格键选择 Actor 中的所有字段。</p></li>
<li>修复导入并保存更改。</li>
</ol>
<p>为表创建 POJO 之后,您需要为 <tt>Actor.java</tt> 创建一个 Hibernate 映射文件。</p>
<ol>
<li>在 "Projects"(项目)窗口中右键单击 <tt>sakila.entity</tt> 源包节点,然后选择 "New"(新建)> "Other"(其他)以打开新建文件向导。</li>
<li>从 "Hibernate" 类别中选择 "Hibernate Mapping Wizard"(Hibernate 映射向导)。单击 "Next"(下一步)。</li>
<li>键入 <strong>Actor.hbm</strong> 作为文件名,并将 "Folder"(文件夹)设置为 <b>src/main/resources/sakila/entity</b>。单击 "Next"(下一步)。</li>
<li>键入 <b>sakila.entity.Actor</b> 作为要映射的类。</li>
<li>从 "Database Table"(数据库表)下拉列表中选择 <b>actor</b>(如果尚未将其选定)。单击 "Finish"(完成)。<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>单击 "Finish"(完成),此时将在源代码编辑器中打开 Hibernate 映射文件 <tt>Actor.hbm.xml</tt>。IDE 还会自动在 <tt>hibernate.cfg.xml</tt> 中添加一个映射资源条目。您可以通过在 <tt>hibernate.cfg.xml</tt> "Design"(设计)视图或在 XML 视图中展开 "Mapping"(映射)节点来查看条目详细信息。XML 视图中的 <tt>mapping</tt> 条目如下所示:
</p>
<pre class="examplecode">
&lt;mapping resource="sakila/entity/Actor.hbm.xml"/&gt;
&lt;/session-factory&gt;
&lt;/hibernate-configuration&gt;</pre>
</li>
<li><tt>Actor.hbm.xml</tt> 执行以下更改(黑体),将 <tt>Actor.java</tt> 中的字段映射到 ACTOR 表中的列。
<pre class="examplecode">&lt;hibernate-mapping>
&lt;class name="sakila.entity.Actor" <strong>table="actor"&gt;
&lt;id name="actorId" type="java.lang.Short"&gt;
&lt;column name="actor_id"/&gt;
&lt;generator class="identity"/&gt;
&lt;/id&gt;
&lt;property name="firstName" type="string"&gt;
&lt;column length="45" name="first_name" not-null="true"/&gt;
&lt;/property&gt;
&lt;property name="lastName" type="string"&gt;
&lt;column length="45" name="last_name" not-null="true"/&gt;
&lt;/property&gt;
&lt;property name="lastUpdate" type="timestamp"&gt;
&lt;column length="19" name="last_update" not-null="true"/&gt;
&lt;/property&gt;
&lt;/class&gt;</strong>
&lt;/hibernate-mapping&gt;</pre>
<p class="tips">在修改映射文件时,可以使用编辑器中的代码完成功能完成各个值。</p>
<p class="notes"><b>注:</b>默认情况下,生成的 <tt>class</tt> 元素具有一个结束标记。因为需要在打开和关闭 <tt>class</tt> 元素标记之间添加属性元素,所以需要进行以下更改(显示为粗体)。进行更改之后,可以在 <tt>class</tt> 标记之间使用代码完成。</p>
<pre class="examplecode">&lt;hibernate-mapping&gt;
&lt;class name="sakila.entity.Actor" <strong>table="actor"&gt;
&lt;/class&gt;</strong>
&lt;/hibernate-mapping&gt;</pre>
</li>
<li>单击工具栏中的 "Validate XML"(验证 XML)按钮并保存更改。</li>
</ol>
<p>如果要进一步定制应用程序,单独创建 POJO 和 Hibernate 映射文件可能是一种非常方便的方法。</p>
<div class="feedback-box"><a href="/about/contact_form.html?to=3&amp;subject=Feedback:%20Creating%20a%20Maven%20Project">发送有关此教程的反馈意见</a></div>
<br style="clear:both;" />
<h2>另请参见</h2>
<p>有关创建 Swing GUI 应用程序的附加信息,请参见以下教程。</p>
<ul>
<li><a href="quickstart-gui.html">在 NetBeans IDE 中设计 Swing GUI</a></li>
<li><a href="gui-functionality.html">构建 GUI 应用程序简介</a></li>
<li><a href="../../trails/matisse.html">Java GUI 应用程序学习资源</a></li>
</ul>
</body>
</html>