打印

在 Visual Web JSF 应用程序中使用 Hibernate

本帖已经被作者加入个人空间

在 Visual Web JSF 应用程序中使用 Hibernate

By netbeans.org, 5/24/08
教程将介绍如何使用 NetBeans IDE 创建和部署一个 Web 应用程序,用于显示数据库中的数据。此 Web 应用程序将使用 Hibernate 框架作为持久层,将 Java 对象持久化存储于关系数据库中。

Hibernate 框架提供了一些对象关系映射(object relational mapping,ORM)工具。本教程将介绍如何在 IDE 中添加对 Hibernate 框架的支持,并创建必要的 Hibernate 文件。这些文件是 Hibernate 持久化简单初始 Java 对象( plain old Java objects,POJOs)时必须使用的文件。有关使用 Hibernate 的更多信息,请参阅 hibernate.org 提供的 Hibernate 文档。

创建 Java 对象并配置应用程序使用 Hibernate 之后,在 Web 页面中添加 Visual Web JSF 组件来显示数据。要熟练使用 Visual Web JSF 组件,请参阅 NetBeans Visual Web JSF 开发入门。


目录

    *  在 IDE 中添加 Hibernate 支持
    * 创建 Web 应用程序项目
    * 修改 Hibernate 配置文件
    * 创建 Java 对象
          o 创建 Person.java 类
          o 创建 Trip.java 类
    * 建立类与数据表的映射关系
          o 建立 Person.java 与 PERSON 表的映射关系
          o 建立 Trip.java 与 TRIP 表的映射关系
    * 创建 Hibernate Helper 类
    * 创建 Visual Web JSF 页面
          o 在页面中添加 Visual Web JSF 组件
          o 通过 SessionBean1 访问数据源
          o 绑定组件与数据
    * 运行项目

学习本教程,需准备以下软件和资源。
软件或资源                                                               所需版本
NetBeans IDE                                                 Web & Java EE 6.1
Java 开发工具包(Java Developer Kit,JDK)         版本 6 或者版本 5
JavaServer Faces 组件/
Java EE 平台                                            1.2 和 Java EE 5.* 或者1.1 和 J2EE 1.4
GlassFish Application Server                                        V2
Hibernate 插件                                             可以通过 NetBeans Update Center 获取
Travel 数据库                                                             是

[ 本帖最后由 云杉上的蝴蝶 于 2008-6-9 21:58 编辑 ]
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP

在 IDE 中安装 Hibernate 插件

在 IDE 中集成 Hibernate,需要安装 Hibernate 插件,该插件可以通过 NetBeans Beta Update Center 获取。

   1. 在主菜单中选择 Tools > Plugins 。
   2. 在 Available Plugins 选项卡中,选择以下插件并单击 Install 按钮。
          * Hibernate Support
          * Hibernate 3.2.5 Libray
   3. 根据向导提示一步步地安装插件。

安装 Hibernate 插件之后,IDE 将支持创建 Hibernate 文件和在项目中添加 Hibernate 库。
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP

创建 Web 应用程序项目

在本练习中,我们将创建一个 Visual Web JSF 项目,并在此项目中添加 Hibernate 库。在创建项目时,选择 Visual Web JSF 和 New Project 向导的 Frameworks 面板中的 Hibernate,然后就可以指定数据库。

   1. 选择 File > New Project (Ctrl-Shift-N)。在 Web 类别中选择 Web Application ,单击 Next 按钮。
   2. 在 project name 框内键入 HibernateTravelApp ,并设置项目的存放位置。
   3. 如果选定了 Use Dedicated Folder 选项,取消选定。(因为在本教程中您不和其他用户共享库,所以不需要将该项目复制到指定文件夹中。)
      单击 Next 按钮。
   4. 将 server 设置为 GlassFish ,将 Java EE Version 设置为 Java EE 5。单击 Next 按钮。
   5. 选中 Visual Web JavaServer Faces 复选框。
   6. 选中 Hibernate 3.2.5 复选框。
   7. 使用默认的会话名称 (session1) ,确保选定 travel 数据库,它将在数据库连接和 URL 连接中使用 。单击 Finish 按钮。

注意: IDE 随带一个示例 Travel 数据库和此数据库的预配置连接。如果在向导的 Frameworks 面板中的 travel database 按钮不可用,检查在 Services 窗口的 Databases 节点下是否列有 travel database 选项。如果这儿也没有该连接,需要创建数据库连接。

单击 Finish 按钮,IDE 将创建一个 Web 应用程序项目,并在编辑器中打开 hibernate.cfg.xml 文件和 Page1。

如果在 Projects 窗口中展开 Libararies 节点,您会发现 IDE 已经在该项目中添加了 Hibernate 库。
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP

修改 Hibernate 配置文件

创建使用 Hibernate 框架的新项目时,IDE 将在应用程序上下文类路径的根目录(位于文件窗口,WEB-INF/classes)自动创建 hibernate.cfg.xml 配置文件。此文件位于 Projects 窗口的 Configuration Files 节点下。此配置文件包含与数据库连接、资源映射和其他连接属性相关的信息。此文件可以使用多视图编辑器进行编辑,也可以直接在 XML 编辑器中进行编辑。

在本练习中,我们将编辑 hibernate.cfg.xml 文件中指定的默认属性,以启用 SQL 语句调试日志和 Hibernate 的会话上下文管理。

   1. 如果没有打开 hibernate.cfg.xml 文件,请在 Design 选项卡中打开该文件。在 Project 窗口,展开 Configuration Files 节点,双击 hibernate.cfg.xml 文件,打开该文件。
   2. 在 Optional Properties 下,展开 Configuration Properties 节点。
   3. 单击 Add 按钮,打开 Add Hibernate Property 对话框。
   4. 在此对话框中,选择 hibernate.show_sql 属性,将其值设置为 true。此设置强制 Hibernate 在控制台输出 SQL 语句。

   5. Add Hibernate Property dialog box the hibernate.show_sql property
   6. 展开 Miscellaneous Properties 节点,单击 Add 按钮。
   7. 在 Add Hibernate Property 对话框中,选择属性 hibernate.current_session_context_class ,将其值设置为 thread,启用 Hibernate 的自动会话上下文管理。Add Hibernate Property dialog box for properties hibernate.current_session_context_class


如果在编辑器中单击 XML 选项卡,将以 XML 的格式打开文件。文件如下所示:

<hibernate-configuration>
    <session-factory name="session1">
        <property name="hibernate.dialect">org.hibernate.dialect.DerbyDialect</property>
        <property name="hibernate.connection.driver_class">org.apache.derby.jdbc.ClientDriver</property>
        <property name="hibernate.connection.url">jdbc:derby://localhost:1527/travel</property>
        <property name="hibernate.connection.username">travel</property>
        <property name="hibernate.connection.password">travel</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>

  8. 修改并保存。
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP

创建 Java 对象

在本教程中,我们使用简单初始对象(plain old Java objects,POJOs),Person 和 Trip,表示 travel 数据库中 PERSON 表和 TRIP 表中的数据。每个类都指定了与表中各个数据列相对应的字段。这些字段使用 getters 和 setters 方法来检索和写入数据。类创建之后,需要设置这些类与数据库中表之间的映射。
创建 Person.java 类

   1. 在 Projects 窗口,右键单击 Source Packages 节点,选择 New > Java Class ,打开 New Java Class 向导。
   2. 在此向导中,在 class name 框内键入 Person,在 package 框内键入 travel。单击 Finish 按钮。
   3. 将类做如下修改(粗体),实现 Serializable 接口,添加字段,且这些字段要与数据表中的各列一一对应。

      public class Person implements Serializable {
          private int personId;
          private String name;
          private String jobTitle;
          private boolean frequentFlyer;
          private java.util.Set trips;
      }

   4. 在源码编辑器中右键单击鼠标生成类中各个字段的 getters 和 setters 方法,选择 Insert Code (Alt-Insert),然后选择 Getter and Setter。

   5. 在 Generate Getters and Setters 对话框中,选择所有字段,单击 Generate 按钮。Generate Getters and Setters dialog box

      在 Generate Getters and Setters 对话框中,使用键盘上的向上箭头键移动 Person 的选定项,然后点击空格键选择 Person 的所有字段。
   6. 导入这些语句,修改并保存。

创建 Trip.java 类

   1. 在 Projects 窗口中,右键单击 Source Packages 节点,选择 New > Java Class ,打开 New Java Class 向导。
   2. 在此向导中,在 class name 框中键入 Trip,在 package 框中键入 travel。单击 Finish 按钮。
   3. 将 Trip 类做以下修改(粗体),实现 Serializable 接口,添加字段,且这些字段要与数据表中的各列一一对应。

      public class Trip implements Serializable {
          private int tripId;
          private int personId;
          private Date depDate;
          private String depCity;
          private String destCity;
          private int tripTypeId;
      }

   4. 通过在 Source Editor 中右键单击鼠标生成类中各个字段的 getters 和 setters 方法,选择 Insert Code (Alt-Insert) ,然后选择 Getter and Setter。

   5. 在 Generate Getters and Setters 对话框中,选择所有字段,单击 Generate 按钮。
   6. 导入这些方法,修改并保存。

关闭 Person.java 和 Trip.java,因为它们不再需要编辑。
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP

建立类与数据表的映射关系

首先创建 Hibernate 映射文件 Person.hbm.xml,建立 Person.java 中各个字段和 PERSON 表中各个数据列的映射关系。

   1. 如果未启动 JavaDB 数据库服务器,启动它。
   2. 在 Projects 窗口的 Source Packages 下右键单击 travel 节点,在弹出的菜单中选择 New > Other ,打开 New File 向导。
   3. 在 Categories 列表中选择 Hibernate,在 File Types 列表中选择 Hibernate Mapping File。单击 Next 按钮。
   4. 在 file name 框内键入 Person.hbm,将 folder 设置为 src/java/travel。单击 Next 按钮。
   5. 在 Class 框中键入用作映射的类 travel.Person 。

      注意: 还有一种方法,单击 Browse 按钮,在 Find Type 对话框中键入 Person。
   6. 在 Database Table 的下拉式列表中选择 PERSON。

      注意: 如果 Database Table 的下拉列表是空的,很可能是因为数据库没有运行。在没有指定表的情况下可以继续创建文件,但是在 XML 文件中一定要指定表。
   7. 单击 Finish 按钮。

      单击 Finish 按钮,IDE 将创建一个 Person.hbm.xml 文件,此文件和 Person.java 文件位于相同目录下。在编辑器中打开该文件。默认情况下,XML 文件如下所示:

      <hibernate-mapping>
        <class dynamic-insert="false" dynamic-update="false" mutable="true"
        name="travel.Person" optimistic-lock="version" polymorphism="implicit"
        select-before-update="false" table="PERSON"/>
      </hibernate-mapping>

      注意:在创建文件时,如果不能选择下拉列表中的 PERSON 表,那么一定要在 class 元素中添加 table="PERSON" 。
   8. 在 XML 编辑器中,做如下修改(粗体),设置 id 、属性和一对多的映射关系。

      <hibernate-mapping>
        <class dynamic-insert="false" dynamic-update="false"
            mutable="true" name="travel.Person" optimistic-lock="version"
            polymorphism="implicit" select-before-update="false" table="PERSON">
              <id column="PERSONID" name="personId">
                  <generator class="increment"/>
              </id>
              <property column="NAME" name="name"/>
              <property column="JOBTITLE" name="jobTitle"/>
              <property column="FREQUENTFLYER" name="frequentFlyer"/>
              <set cascade="all-delete-orphan" inverse="true" lazy="true" name="trips" table="TRIP">
                  <key column="PERSONID"/>
                  <one-to-many class="travel.Trip"/>
              </set>
          </class>
      </hibernate-mapping>

      在 XML 编辑器中,可以使用代码完成来帮助您添加属性和值。如果不能使用代码完成,如屏幕截图所示,请参阅下面的注意事项。

#

注意: 默认情况下,class 元素有一个 closing 标签。如果要在 class 元素的 opening 和 closing 标签之间增加属性元素,需要做以下修改。修改之后,就可以在 class 元素之间使用代码完成了。

<hibernate-mapping>
  <class dynamic-insert="false" dynamic-update="false"
  mutable="true" name="travel.Person" optimistic-lock="version"
  polymorphism="implicit" select-before-update="false" table="PERSON">

  </class>
</hibernate-mapping>

# 验证 XML 文件,修改所有验证错误,保存文件。
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP

建立 Trip.java 与 TRIP 表的映射关系

创建 Hibernate 映射文件 Trip.hbm.xml ,在该文件中建立 Trip.java 中的各个字段和 TRIP 数据表中各个数据列的映射关系。

   1. 在 Projects 窗口中,右键单击 Source Packages 下的 travel 节点,在弹出的菜单中选择 New > Other,打开 New File 向导。
   2. 在 Categories 列表中选择 Hibernate,在 File Types 列表中选择 Hibernate Mapping File。单击 Next 按钮。
   3. 在 file name 框中键入 Trip.hbm,将 folder 设置为 src/java/travel。单击 Next 按钮。
   4. 键入将来用作映射的类 travel.Trip。

      注意: 还有一种方法,单击 Browse 按钮,在 Find Type 对话框中键入 Trip。
   5. 在 Database Table 的下拉列表中选择 TRIP。

      注意: 如果数据库下拉列表是空的,保留其为空。以后可以在 XML 编辑器中输入表名。
   6. 单击 Finish 按钮。

      单击 Finish 后,IDE 会创建一个 Trip.hbm.xml 文件,该文件与 Trip.java 文件保存在相同目录下。然后在编辑器中打开该文件。
   7. 在 XML 编辑器中,做以下修改(粗体)。

      <hibernate-mapping>
              <class dynamic-insert="false" dynamic-update="false" mutable="true"
                  name="travel.Trip" optimistic-lock="version" polymorphism="implicit"
                  select-before-update="false" table="TRIP">
              <id column="TRIPID" name="tripId">
                  <generator class="increment"/>
              </id>
              <property column="PERSONID" name="personId"/>
              <property column="DEPDATE" name="depDate" type="date"/>
              <property column="DEPCITY" name="depCity"/>
              <property column="DESTCITY" name="destCity"/>
              <property column="TRIPTYPEID" name="tripTypeId"/>
          </class>
      </hibernate-mapping>

      在 XML 编辑器中,可以使用代码完成来帮助您添加属性和值。
   8. 验证 XML 文件,修改所有验证错误,并保存该文件。
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP

创建 Hibernate Helper 类

使用 Hibernate,需要创建一个 helper 类,该类通过启动和访问 Hibernate 的 SessionFactory 得到一个 Session 对象,以便加载和储存 Person 和 Trip 对象。helper 类首先调用 Configuration(),加载 hibernate.properties 文件。然后调用 configure(),加载 hibernate.cfg.xml 配置文件。最后生成 SessionFactory,得到 Session 对象。

本节使用 New File 向导来创建 helper 类 HibernateUtil.java。

   1. 右键单击 travel 源码包节点,选择 New > Other ,打开 New File 向导。
   2. 在 Categories 列表中选择 Hibernate,在 File Types 中选择 HibernateUtil.java。单击 Next 按钮。
   3. 在 class name 中键入 HibernateUtil。单击 Finish 按钮。

单击 Finish 按钮。在编辑器中打开该类。关闭此文件,因为以后不会再编辑此文件。

现在已经创建好了应用程序需要的所有类。在 Projects 中,展开 Source Packages 节点,项目将如下面的屏幕截图所示。
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP

创建 Visual Web JSF 页面

既然所需类都创建好了,就可以创建用于显示和修改数据的 Web 页面了。下面将使用 JSF 框架和绑定在对象上的 Visual Web JSF 组件来创建一个 JSP 页面。
在页面中添加 Visual Web JSF 组件

   1. 在 Projects 窗口中,展开 Web Pages 文件夹,在 Visual Designer 中打开 Page1.jsp。
   2. 将位于 Palette 的 Woodstock Basic 组件集中的 Drop Down List 组件拖到 Page1 的左上角。
   3. 右键单击 Drop Down List 组件 ,在弹出的菜单中选择 Auto-Submit。

      这样,当用户选择了下拉列表的一个新值后,浏览器将会自动提交该页面。
   4. 再次右键单击 Drop Down List 组件 ,选择并添加 Binding 属性。

      注意: 教程的后面部分将会指定属性 binding。NetBeans IDE 6.1 具有随需应变的绑定功能。在 Visual Web JSF 应用程序中,当组件需要 Java 代码时,必须在组件中手动地添加 binding 属性。具体方法,右键单击每个组件,选择并添加 Binding 属性。关于更多信息,请参阅 随需应变的 binding 属性维客.
   5. 拖放 Table 组件,其位于 Drop Down List 组件下 。
   6. 拖放 Message Group 组件,其位于 Table 组件下。

      Message Group components 有助于诊断运行时的问题。默认情况下,Message Group 组件显示有关运行错误、验证错误和转换错误。
   7. 修改并保存。

Web 页面现在拥有一些组件了,接下来需要将这些组件绑定到数据源中。
|-- AI by Spruce Lab -- | Discover the Info. Tech. for Personal! && Powered by Solaris & Oracle

TOP