| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2120 人关注过本帖
标题:[原创]数据持久化软件--Torque
只看楼主 加入收藏
九层楼
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-11-9
收藏
 问题点数:0 回复次数:9 
[原创]数据持久化软件--Torque
torque是apache下的一个子项目,是与hibernate功能相近的数据持久化软件。
之前学习struts kick start的时候,书里面的例子用的是torque,去apache网上查时,那里的构建工具由ant已经换成了maven,时间紧便没有再看;在国内搜了许多,大多是言之不详,有说明并能够执行成功的,也以mysql居多,与我们当初的mssql环境也不一样,所以就自己总结了一个教程,或者是一个完整的流程(对我们初学者,能走下来的路往往较有吸引力哈)。另外,说是原创,其实过程中参考了好多网上的资料,只是当初没有记录下来网址,这里又不是写学位论文,便不一一引名,只是统一致谢了。
分为五部分∶

torque1分为

torque2配置

torque3编译

torque4测试

torque5生成对象使用

以下逐个说明。
搜索更多相关主题的帖子: Torque 软件 数据 持久化 
2005-11-09 12:28
九层楼
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-11-9
收藏
得分:0 

1torque 分为

1generator部分 --- 解析xml配置,生成sql语句以及*.java文件 ;主要有 torque-gen-templates.jar torque-gen.jar

下载 torque-gen-3.2-rc1.zip,解压后有如下目录结构∶

torque-gen-3.1.1/

lib/ <--- torque生成器类库,包括torque-gen-templatesjar

jar包含各种templates.

src/schema/ <--- Schema for the table used by Torque's IDBroker.

build.properties <--- 用户对torque生成器的配置文件

build-torque.xml <--- The Ant build file containing torque goals.

default.properties <--- 配置torque生成器的缺省属性值

torque-gen-3.2-rc1.jar <--- The generator jar.

2runtime部分 --- 提供运行所需类库等运行环境,包含之以编译运行generator生成的java torque-3.1.1.jar

下载torque-3.2-rc1.zip,解压后有如下目录结构∶

torque/

database/ <--- Contains database specific property files used

during the generating of runtime configuration

property files.

lib/ <--- torqueruntime所需类库

master/build.xml <--- 生成torque.propertiesant配置文件

master/default.properties<--- 内含生成torque.properties所用属性值

master/Torque.master <--- The unprocessed property file template.

Torque.properties <--- 一个sample运行时配置文件,用户需用master

录中的属性文件重新生成自己所用的

注∶常将torque-gen-3.2-rc1.zip和torque-3.2-rc1.zip解压至同一目录,因版本相同,lib目录若重复,覆盖即可。

2005-11-09 12:28
九层楼
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-11-9
收藏
得分:0 

2、torque 配置

1generator部分

1)属性文件 build.properties default.properties,含项目、数据库驱动等属性。

①读build-torque.xml可知,在配置generator时,首先载入 build.properties 然后载入 default.properties。根据ant的属性只可赋值一次规则,不会有冲突。实际上,default中多定义目录路径等,build多与用户相关,如项目、数据库。

②其中各项可以参考该.\docs\properties-referrence.html

2)数据库schema id-table-schema.xml(由torqueIDBroker服务调用) myproject-schema.xml(描述项目数据库及表的性质)

1myproject-schema.xml的书写见生成器目录\docs\schema-reference.html

①主键约束∶是<column>标签的属性,

<column ... primaryKey = "true"... />

②外键约束∶是<table>的子标签

<foreign-key foreignTable="MY_TABLE" name="MY_TABLE_FK"

onUpdate="cascade" onDelete="none" >

<reference local="FK_TABLE_ID" foreign="PK_COLUMN_ID"/>

</foreign-key>

③唯一性约束∶

<unique name="MY_UNIQUE">

<unique-column name="UNIQUE_COLUMN"/>

</unique>

2)书写schema时,每表均定义一个与业务无关的id列作为主键。这是因为利用torque生成sql时,若选择native方法,mssql自动把主键作为标识列。(与业务有关的属性,可以用唯一性约束来约束之)

3)用winrar打开torque-gen-3.2-rc1.jar 取出database.dtd,放入src\schema中,然后在所用-schema.xml中将dtd引用改为相对路径

“file:///torque generator的安装目录/src/schema/database.dtd”

2runtime部分

编辑 master\default.properties里面的数据库诸多属性,然后利用master\build.xml进行ant 编译,生成 torque目录下所需的torque.properties文件

[此贴子已经被作者于2005-11-9 12:35:12编辑过]

2005-11-09 12:29
九层楼
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-11-9
收藏
得分:0 
3、编译

前期准备∶

1、如果在编译自己的类时,采用ant build.xml中自定义的classpath,则要把连接数据库的驱动jar,放入classpath中,比如project/lib中。

2、将torque-rc.ziptorque-gen-rc.zip解压至同一个目录

编译任务∶

1ant -f build-torque.xml 生成所描述库和表的sql脚本

2ant –f build-torque.xml init-id-table-sql 若不用idbroker服务,可跳过此步

3ant -f build-torque.xml insert-sql 在对应数据库里面生成表

注意∶mssql中不能用create-db 任务创建数据库,需要手动建立数据库

4)编译torque生成的java源文件,生成om

修改build-torque.xml,属性定义块中,

应有 <property name="torque.jar" value="torque-gen-3.2-rc1.jar"/>

再加入 <property name="torque_.jar" value="torque-3.2-rc1.jar"/>

然后再在路径定义块中,加入 <pathelement path="${torque_.jar}"/>

即把所需jar包全包含入classpath

ant –f build-torque.xml compile ,则om类被编译到bin\classes\包名\下。

2005-11-09 12:29
九层楼
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-11-9
收藏
得分:0 

4、测试
下面运行一个简单例子进行测试,通过它可以了解目录结构∶

1)在${torque.home}目录下建立 mysrc目录和 mybuild目录,相应的,在build-torque.xml文件的属性模块加入∶

<property name="mytest.src" location="mysrc"/>

<property name="mytest.build" location="mybuild"/>

2)在target模块中,加入∶

<target name="myjar1" description ="jar my om classes" >

<jar destfile="${torque.lib.dir}\myom.jar"

basedir="${torque.compile.build.dir}"/>

</target> //om类打包至lib,方便在编译自己的项目类时使用它们

<target name="mycompile" depends="myjar1" >

<javac destdir="${mytest.build}" srcdir="${mytest.src}"

classpathref="torque-classpath"/>

</target> //编译自己的项目类

<target name="myjar2" description ="jar my own classes" >

<jar destfile="${torque.lib.dir}\mytest.jar" basedir="${mytest.build}"/>

</target> //把自己的项目类也打包至lib中,这样下面用java执行时就只需要包含路径模块中定义的classpath就行了

<target name="myjava" depends="mycompile,myjar2" >

<java fork="true" classname="Test" classpathref="torque-classpath"/>

</target>

3)在mysrc下写Test.java,内容如下,

import myapp.*; //注意你在build.properties中设置的package

import org.apache.torque.Torque;

public class Test { public static void main(String [] args) {

try { Torque.init("Torque.properties"); //进行初始化

Users u = new Users(); System.out.println("hehe"); } catch(Exception e) {}

//ant调用myjava任务,成功输出,就说明上面对om类的引用是正确的!

}}

2005-11-09 12:30
九层楼
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-11-9
收藏
得分:0 

5、生成对象的引用(这里的例子代码,是我在网上查到的别人的资料,在此再次致谢了)
1
generator生成对象的结构∶

bin\classes\myapp包下有若干类和一个子包mapmap包不用考虑。在bin\classes\myapp下会为schema中定义的每一个表生成四个相关的类。以Author来说,有四个类和他对应,分别为:BaseAuthorPeer, AuthorPeer, BaseAuthor, AuthorBaseAuthorPeerBaseAuthor分别是AuthorPeerAuthor的基类,基类是用来提供底层功能的,我们只要操作AuthorPeerAuthor类就可以完成对数据库中的表author的操作如增加,删除,更新和查询等。

2、生成对象的使用∶

对author进行增加操作的代码如下:

Author na = new Author();

na.setFirstName("a");

na.setLastName("b");

na.save(); // 或用AuthorPeer的静态方法替代AuthorPeer.doInsert(na);

对author进行更新操作的代码如下:

na.setLastName("c");

na.save(); //或用AuthorPeer的静态方法替代AuthorPeer.doUpdate(na);

对author进行删除操作的代码如下:

AuthorPeer.doDelete(na); //进行delete时只能使用AuthorPeer的静态方法

对author进行查询,查询出author表中的author_id字段的值在1和10000之间的所有数据

Criteria testCriteria = new Criteria();

testCriteria.add(AuthorPeer.AUTHOR_ID,1,Criteria.GREATER_THAN); testCriteria.add(AuthorPeer.AUTHOR_ID,10000,Criteria.LESS_THAN);

List tList = AuthorPeer.doSelect(testCriteria);

log.debug("all size:" + tList.size());

for (int i = 0; i < tList.size(); i++) {

Author o = (Author) tList.get(i);

System.out.println("Author" + i + " : " + o.toString());

}

由上可以看出,对等类(peer类)和数据对象(data objects)的区别是∶

对等类”提供静态方法对表进行增加、删除、修改记录的操作;“数据对象”按照“一行一个对象”封装表中的记录信息,并对每个字段(即对象的一个属性)提供getters/setters方法。因此,常用对等类配合criteria类获得对象,然后赋予数据对象获得具体的字段信息。

[此贴子已经被作者于2005-11-9 12:34:50编辑过]

2005-11-09 12:31
九层楼
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-11-9
收藏
得分:0 
torque的使用简单易行,较好的实现了j2eeDAO模式,欢迎讨论
2005-11-09 12:41
飘飘叶子
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:597
专家分:10
注 册:2005-8-17
收藏
得分:0 
辛苦了……
没接触过的东西,慢慢看了……谢谢分享~给个精华不算过吧?

向着软件工程师的目标前进!
2005-11-09 17:16
九层楼
Rank: 1
等 级:新手上路
帖 子:33
专家分:0
注 册:2005-11-9
收藏
得分:0 
谢谢版主支持......
2005-11-09 20:25
曾阿牛
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2005-10-14
收藏
得分:0 
没接触过...不懂...好象很高深...复杂...慢慢看吧

虽然我看不懂 也支持你一下

什么时候才能成为论坛游民啊....
2005-11-09 22:43
快速回复:[原创]数据持久化软件--Torque
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020678 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved