使用 Apache OpenJPA 开发 EJB 3.0 应用,第 7 部分: 使用 Eclipse Dali 开发 OpenJPA 应用
关于 Eclipse Dali JPA 工具
Dali JPA Tools 是由 Eclipse.org 推出、支持 JPA 项目开发的插件,主要目标是为用户开发、编辑 EJB 3.0 中 JPA 实体的映射关系提供可视化工具支持。Dali 是 Eclipse WTP(Web Tools Platform)工具集中的一部分,这是由 Eclipse.org 提供、支持 Web 应用和 Java EE 应用开发的工具集。
目前 Dali 的最新版本是 1.0,它是 WTP 2.0 的一部分,不提供独立下载。Dali 1.0 支持 Eclipse 3.3 版本和 WTP 2.0 版本。本文中所有描述均是针对 Dali 1.0 版本。Dali 还有一个 0.5 版本,它能够支持 Eclipse 3.2 和 WTP 1.5 版本,Dali 0.5 和 1.0 在功能和使用习惯上并没有太大的差异,因此可以作为老版本 Eclipse 和 WTP 用户的一种选择。
Dali 工具集中为用户开发 JPA 应用提供了专门的 JPA 透视图,主要由 Package Explorer、Data Source Explorer、JPA Structure 和 JPA Details 视图组成,Package Explorer 用于管理所有的 JPA 项目,Data Source Explorer 视图用于管理数据库联接,JPA Structure 和 JPA Details 视图是 JPA 透视图最重要的部分,用于管理 Java 对象和数据库之间的映射关系、实体之间的继承、关联关系等以及实体的主键生成策略。
使用 Dali 开发的典型过程
Dali 目前支持从数据库生成实体的开发过程,即开发者首先创建数据库结构,然后使用 Dali 工具提供的向导根据数据库表结构生成实体、并使用透视图和视图调整实体主键生成策略、实体之间继承、关联关系等。这种方式非常适合习惯于在系统开发过程中首先完成数据库设计的开发团队,他们可以基于设计好的数据库结构直接生成实体,然后再来做相关的调整。本文将演示这个开发过程。
在 Dali 中还支持从实体生成数据库表的开发过程,即先使用 Dali 工具创建实体、然后再使用透视图和视图调整实体主键生成策略、实体之间继承、关联关系等内容,最后根据这些实体以及关系生成数据库表结构。不过现在这一功能还不是十分完善,需要等待 Dali 在新版本中提供更多的特性。
工具下载、安装
下载 Dali 工具,可以访问 Eclipse.org 获取下载链接。请读者根据自己的 Eclipse 版本和相应环境选择合适的 Dali 版本下载,Dali 1.0 版本需要 Eclipse 3.3 和 WTP 2.0 的支持,而 Dali 0.5 版本可以使用 Eclipse 3.2 和 WTP 1.5 版本。
要运行 Dali 工具,您还需要下载和安装 JDK 5.0 以上版本,可以访问 Sun 网站 获取 JDK 的最新版本。
开发环境
上面的章节中我们简单介绍了 Dali 的基本信息,下面将会通过一个简单的例子来说明如何使用 Dali 完成 OpenJPA 应用的开发。开发环境使用的操作系统和开发工具如下,如果使用其它的操作系统或者开发工具版本,请根据下面章节中描述的内容进行相应的调整。
- 操作系统:Windows XP
- Eclipse 版本号:3.3
- WTP 版本号:2.0
- Dali 版本号:1.0
- 数据库:MySQL 5.0
- 数据库用户名 / 密码:dali/dali
实例中的业务说明
我们假设实际业务中存在名为 Animal
的对象,在某一个应用场景中,我们需要使用 OpenJPA 框架提供的工具和接口完成 Animal
对象的持久化、属性修改、删除、查找等功能。为了说明的简单,假设 Animal
对象只有两个属性:id
和 name
,其中 id
字段代表的是编号(编号由 MySQL 数据库自动生成),name
属性表示名称。我们可以使用下面的 SQL 语句,在 MySQL 数据库中初始化数据库表。
清单 1. 初始化数据库表
CREATE TABLE animal (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(45) NOT NULL,
PRIMARY KEY (id)
);
使用 Dali 开发 OpenJPA 应用
在本章节中,我们将详细描述如何使用 Dali 来完成上面这个实际业务需求的步骤。
连接数据库
开发 JPA 项目之前,我们需要在工作台中配置到数据库的连接,Dali 工具将会使用我们配置好的数据库连接生成数据库表结构对应的实体。
数据库连接的详细配置过程如下:
- 打开 Eclipse 开发环境,切换到 JPA 透视图后,在 Data Source Explorer 视图中的 Databases 节点上右键单击,选择“New…”。
图 1. 新建数据库连接
- 在弹出的数据库连接类型选择界面中选择“SQL Model-JDBC Connection”,单击“next”按钮。
图 2. 选择连接类型
- 在 JDBC 连接基本信息界面中输入如下信息,并且选中“auto-connect when the wizard is finished or when Data Source Expolorer opens”,单击“next”按钮。
图 3. 输入详细信息
- 在 JDBC 连接信息框中点击“select a driver from the drop-down”后面跟着的“...”按钮,弹出 JDBC 驱动选择框。
图 4. JDBC 驱动选择框
- 在 JDBC 选择框中选中“MySQL -> 5.0”节点,单击右边的“Add…”按钮。
图 5. 选择合适的驱动
- 在弹出框中选择“Database -> MySQL -> 5.0 -> MySQL JDBC Driver”,在 Driver Name 后面的文本框中输入“MySQL-JDBC-Driver”,单击“Ok”按钮。
图 6. 输入驱动名
- 在 JDBC 驱动详细信息中提供 MySQL 驱动 jar 文件,并且在 Properties 区设置访问数据库的 URL、JDBC 驱动类、用户名和密码,单击“Ok”按钮。
图 7. 提供 MySQL 驱动 jar 文件
- 其它界面上均单击“Ok”按钮。
所有动作完成后,Data Source Explorer 视图中将会出现新创建的数据库连接并且已经连接到数据库,如下图所示。
图 8. Data Source Explorer 视图
创建使用 OpenJPA 的 JPA 项目
数据库连接完成以后,我们就可以开始开发 JPA 应用了。在下面的步骤中,我们将创建 JPA 项目并指定由 OpenJPA 实现。
- 通过菜单“File -> New -> Project…”打开项目类型选择框。
图 9. 项目类型选择框
- 项目类型选择框中选择“JPA -> JPA Project”,单击“next”按钮。
图 10. 项目类型选择框
- 在项目基本信息框中输入项目名称“Dali-demos”,单击“next”按钮。
图 11. 输入项目名称
- 选中“use implementation library”和“annotated classes must be listed in persistence.xml”,单击“configure default JPA implementation library”,进入 JPA 实现包的配置界面。选中“create orm.xml”。
图 12. JPA 实现包的配置界面
- 单击“configure user libraries”。
图 13. 定制用户库
- 单击“New…”按钮。
图 14. 新建用户库
- 输入“user library name”为“OpenJPA”,选中“System library”。
图 15. 输入用户库名称
- 选中新建的 OpenJPA 节点,单击“Edit…”按钮。
图 16. 编辑用户库
- 将 OpenJPA 安装包目录下的 openjpa*.jar 和 persistence-api-1.0.jar 文件加入到 OpenJPA liberary 中。
图 17. 添加 OpenJPA 库文件包
- 一直单击“OK”按钮,回到 JPA 项目配置界面,在“use implementation library”后面的选择框中选择前面创建的 OpenJPA 实现。
图 18. 设置 OpenJPA 实现
- 单击“Finish”按钮,完成 JPA 项目的创建。
项目成功创建后,在 Package Explorer 视图中,我们可以看到,系统自动为我们生成了相应的目录和文件。
图 19. 生成的目录和文件
从数据库生成实体
通过上面的步骤我们已经创建了合适的 JPA 项目,现在我们需要生成 JPA 中的重要内容 ---- 实体了,Dali 中支持直接从数据库表生成相应的实体,下面是详细的步骤和说明。
- 在 Dali-Demos 项目上单击右键,在弹出的上下文菜单中选择“JPA Tools -> Generate Entities”。
图 20. 生成实体的菜单项
- 选择数据库的 Schema 为“dali”。
图 21. 选择数据库 Schema
- 输入实体类所在的包“com.levainservice”,然后选择需要生成实体的数据库表。
图 22. 选择数据库表
- 单击“Finish”按钮就可以完成实体的创建工作。
Dali 将会自动创建实体类 Animal
,并且将它们注册到 persistence.xml 文件中。
- 生成的
Animal
实体类的主体内容如下:
@Entity
public class Animal implements Serializable {
@Id
private Object id;
private String name;
}
- 修改后的 persistence.xml 文件的内容如下,其中的粗体部分是本步骤中由 Dali 生成的。
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="Dali-demos">
<mapping-file>META-INF/orm.xml</mapping-file>
<class>com.levainservice.Animal</class>
</persistence-unit>
</persistence>
调整实体类
通过上面的步骤,我们已经生成了实体,但是,向导生成的实体并不能完全满足要求,我们仍然需要根据实际情况进行调整。演示实例中 Animal 实体类的 id 字段是由数据库自动生成的,我们需要使用 Dali 提供的界面进行调整,调整步骤如下:
进入 JPA 透视图,从左边的的 Package Explorer 视图中双击 Animal.java 打开 Animal
实体类编辑窗口。
- 将
Animal
实体的id
字段从Object
类型修改为int
类型; - 在 JPA Structure 视图中选择“id”节点,在 JPA Details 视图中勾中“Primary Key Generation”,在 Strategy 下拉框中选择“Identity”。
图 23. 调整实体类
至此,我们已经使用 Dali 生成了 OpenJPA 运行所需要的最重要的部分 — 实体,我们可以编写测试代码来访问新创建的实体了,如何编写测试代码来访问新创建的实体请参考本系列文章 第 2 部分:开发第一个 Open JPA 应用 中对应部分的内容。您还可以 下载 本文的示例代码,其中也包括了访问 Animal 实体的代码,可供参考。
总结
Dali 是由 Eclipse.org 提供的开发 JPA 应用的可视化编辑工具,它是 Eclipse 的一个插件,属于 WTP 平台的一部分,使用 Dali 工具可以直接从数据库生成实体,随后开发者可以使用 Dali 提供的 JPA Structure 和 JPA Detail 视图调整实体和数据库的映射关系以及实体之间的关系,使用 Dali 工具也可以由开发者先创建实体类,然后生成创建对应数据库表的 SQL 语句。
本文中作者通过一个简单的例子,详细地说明了使用 Dali 开发 OpenJPA 应用所需要完成的设置工作,同时演示了 Dali 提供的与 JPA 开发相关的向导、透视图、视图生成、调整实体的详细使用过程。