Apache Torque 是一个使用关系数据库作为存储手段的Java应用程序持久化工具。Torque是一个开源项目,由Web应用程序框架
Jakarta Apache Turbine 发展而来,但现在已完全独立于Turbine。通过JDBC,Torque支持大多数流行的开源商业数据库,包括Oracle、Microsoft SQL Server、IBM DB/2、MySQL以及PostgreSQL。
可以用Torque来为数据访问层声成Java代码。也可以通过它从现存数据库中取出Java对象(逆向工程),前提是你拥有一个现存的数据访问对象(DAO)层。对于新的项目来说,如果你用XML为你的业务对象建模,Torque将生成创建数据库表的SQL脚本以及用来读取、写入和查询数据的Java对象。
J2EE程序员对于持久化层有很多不错的选择。( 这里 列举了其它的方法。)我们的重点是Torque所提供的功能以及怎样使它工作起来。本文的示例代码可以 在此 下载。
使用Torque生成数据访问层和值对象
Torque有两大组成部分——生成组件和运行时组件。可以用Torque来生成值对象、SQL表的创建脚本以及数据访问层。 Apache Ant
或者 Apache Maven 都能运行Torque生成器。在本文中,我选用了Ant。
Torque能轻松维护代码是因为值对象、数据访问对象和SQL代码全部是从一个被称为schema的XML文件生成的。将此文件命名为yourprojectname-schema.xml并将其放到Torque安装目录的schema子目录中。这个XML文件包含了你的每个值对象,包括名字、属性以及和其它对象的关系。这里的例子用到的XML schema文件叫作builder-schema.xml,在示例代码中可以找到。注意在这里我们建立了一个从Product表到Vendor表的外键参考。这是因为一个供应商可以有很多产品,而每种产品都只有一个供应商。
另一个重要的配置文件是Torque安装目录下的build.properties文件。必须编辑这个文件来添加项目名、使用的数据库、必须的JDBC连接信息以及生成的类文件该放到那个包中。这个文件也包含在供下载的示例代码中。
在数据库管理工具中创建一个库,确保你的Apache Ant版本是1.5以上。将驱动JDBC的JAR文件放到Torque安装目录的lib子目录中。然后在Torque目录中运行下面的命令:
ant -f build-torque.xml
Torque应该将所有生成的类文件放到主安装目录下的src/java目录中。而SQL脚本放在src/sql目录中。
生成的Java类和SQL脚本
Torque将为schema XML文件中的每个对象创建5个Java类:
Base Peer类
Peer类(Base Peer类的扩展)
Base Data Object类
Data Object类(Base Data Object类的扩展)
Map Builder类
由于你可以编辑schema并返回生成的脚本,必须有一种方法来还原你所做的改动。Torque通过创建基类来解决这个问题,基类每次都重新生成,而扩展类只在不存在时才生成。应该将所有的代码添加到扩展类中。而不应该编辑Base Peer、Base Data Object和Map Builder类。
Base Data Object类包含了获取和设置对象属性以及将对象存入数据库的方法。BaseVendor.java就是一个例子。Base Peer类包含了从数据库中获取、选择、插入和删除数据对象的方法。其例子是BaseVendorPeer.java。MapBuilder类被Peer类使用。
Peer类和Data Object类是空的,必要的话可以添加或覆盖方法来实现你的业务逻辑。(参见下载文件中的VendorPeer.java和Vendor.java。)
创建的SQL脚本是针对你选用的数据库的。每个数据库都有一些微妙的特性,Torque必须处理全部这些。如果要更换数据库的话,更新build.properties中的信息并重新生成类和SQL脚本。主要的SQL脚本生成在builder-schema.sql文件中。如果需要的话,Torque还能够运行SQL脚本。如果选择了Torque ID Broker方法(下面将会讲到)那么要确信你还对数据库运行了第二个ID方法。
Criteria类
在Torque中,使用名为Criteria的类来模拟SQL的WHERE语句。创建一个新的Criteria对象,并使用其方法来向它添加限制条件。
ID方法
Torque可以使用很多方法来为数据库中的对象生成主键。这个例子中,我们使用Torque的ID Broker方法来生成键。这并不依赖数据库的兼容性。如果想利用数据库的内建功能,可以使用本地方法。每种数据库都用不同的方法来为表中的每条记录创建唯一的主键。也可以让Torque不为表中的记录声称主键。编写一个有效对象映射最难的地方是将数据库的主键和一个单独的对象实例联系起来,而使用Torque却使它变得相当轻松。
在应用程序中集成Torque
一旦数据库设置好并且拥有了生成类,就可以将Torque运用到程序中了。编辑Torque.properties文件以使用JDBC连接信息和项目名称(builder)。确信在程序中用Torque.init()方法对Torque进行初始化。对于我们例子程序来说,将示范Vender和Product对象之间的一对多联系。我们还将使用Peer类来销毁Product对象。要获取更多的信息,可以到 Troque Web Site 去查询生成类的方法。