Torque学习概要的内容介绍
Torque学习概要的内容介绍
	Torque学习概要
	1. Torque介绍
	Torque是一个持久层框架,也是jakarta的一个子项目,原来包括在Turbine框架中,从Turbine2.2开始Torque被分离出来作为一个单独的子项目。目前最高版本是3.2。
	2. 对持久层以及持久层框架的理解
	所谓持久层就是在整个系统中与持久存储介质如Database,LDAP Server,XML等打交道的部分。持久层框架的作用就是使持久层访问持久介质更加方便。如果是为了访问Database而建立的持久层框架那么就又有一个O/R Mapping的概念。O/R Mapping就是建立对象(Object)与关系数据库(R)中的表(不一定是一对一)的映射。Torque就是这样一种起到O/R Mapping作用的持久层框架。他使java程序员可以方便地通过操作普通java对象的方式来访问数据库,甚至不用了解数据库的相关知识(最好是了解),另一个好处是屏蔽数据库类型即可任意更换持久层框架支持的Database。
	3. Torque的工作原理
	一般在利用O/R Mapping框架进行开发的时候,有三个基本的单元即关系数据库中的表(Table),Java中的持久对象(PO),定义PO到Table映射的xml文件(Schema)。
	首先,Torque包含一个generator用来根据由开发者配置好的Schema来自动生成PO和Table,这就意味着开发者只要定义好Schema,PO和Table就可以自动生成了。
	在生成好的PO和Table以后,开发者就可以利用PO来进行对Table的访问了。为了达到这个目的Torque提供了一个运行时环境来保证代码的正确运行。在工程中引入了torque相关的.jar就可以拥有这个运行环境了。
	4. Torque中的包,类和接口
	Torque的源码提供的是运行环境,基于Torque开发关心的是生成的PO的使用方法即怎样使用生成的PO来操作Table。下面会通过Torque导学上带的例子来详细说明。
	5. 导学中的例子
	5.1利用generator生成PO和Table
	首先,要通过generator来生成PO和Table要定义Schema和进行generator的配置。
	Schema的定义如下:
		<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
	
		<!DOCTYPE database SYSTEM
	
		"http://db.apache.org/torque/dtd/database_3_1.dtd">
	
		<database
	
		name="torque"
	
		defaultIdMethod="idbroker">
	
		<table name="book" description="Book Table">
	
		<column
	
		name="book_id"
	
		required="true"
	
		primaryKey="true"
	
		type="INTEGER"
	
		description="Book Id"/>
	
		<column
	
		name="title"
		required="true"
	
		type="VARCHAR"
	
		size="255"
	
		description="Book Title"/>
	
		<column
	
		name="isbn"
	
		required="true"
	
		type="VARCHAR"
	
		size="24"
	
		javaName="ISBN"
	
		description="ISBN Number"/>
	
		<column
	
		name="publisher_id"
	
		required="true"
	
		type="INTEGER"
	
		description="Foreign Key Publisher"/>
	
		<column
	
		name="author_id"
	
		required="true"
	
		type="INTEGER"
	
		description="Foreign Key Author"/>
	
		<foreign-key foreignTable="publisher" onDelete="cascade">
	
		<reference
	
		local="publisher_id"
	
		foreign="publisher_id"/>
	
		</foreign-key>
	
		<foreign-key foreignTable="author" onDelete="cascade">
	
		<reference
	
		local="author_id"
	
		foreign="author_id"/>
	
		</foreign-key>
	
		</table>
	
		<table name="publisher" description="Publisher Table">
	
		<column
	
		name="publisher_id"
	
		required="true"
	
		primaryKey="true"
	
		type="INTEGER"
	
		description="Publisher Id"/>
	
		<column
	
		name="name"
	
		required="true"
	
		type="VARCHAR"
	
		size="128"
	
		description="Publisher Name"/>
	
		</table>
	
		<table name="author" description="Author Table">
	
		<column
	
		name="author_id"
	
		required="true"
	
		primaryKey="true"
	
		type="INTEGER"
	
		description="Author Id"/>
	
		<column
	
		name="first_name"
	
		required="true"
	
		type="VARCHAR"
	
		size="128"
	
		description="First Name"/>
	
		<column
	
		name="last_name"
	
		required="true"
	
		type="VARCHAR"
	
		size="128"
	
		description="Last Name"/>
	
		</table>
	
		</database>
	在这个schema里定义了Table的结构,生成的PO在会按照一定规则与Table进行对应。
	然后修改build.properties文件加入如下部分:
		torque.database = mysql
	
		torque.project = torque
	
		torque.addGetByNameMethod = true
	
		torque.addIntakeRetrievable = false
	
		torque.addSaveMethod = true
	
		torque.addTimeStamp = true
	
		torque.basePrefix = Base
	
		torque.complexObjectModel = true
	
		torque.useClasspath = false
	
		torque.useManagers = false
	
		torque.targetPackage=org.together.om
	
		torque.database.createUrl = jdbc:mysql://127.0.0.1/mysql
	
		torque.database.buildUrl = jdbc:mysql://127.0.0.1/torque
	
		torque.database.url = jdbc:mysql://127.0.0.1/torque
	
		torque.database.driver = org.gjt.mm.mysql.Driver
	
		torque.database.user = root
	
		torque.database.password = haohao
	
		torque.database.host = 127.0.0.1
	
		torque.sameJavaName = false
	关键是绿色标记的部分,表明是连接的mysql数据库,并将生成的PO放到org.together.om包中。 最后利用ant执行generator,这样就可以在数据库中生成相应的Table,并生成于Table对应的PO(放在定义好的org.together.om下)。拿schema中定义的Author为例,运行generator后可以在mysql数据库中生成一张Author表,DDL如下:
		CREATE TABLE `author` (
	
		`author_id` int(11) NOT NULL default '0',
	
		`first_name` varchar(128) NOT NULL default '',
	
		`last_name` varchar(128) NOT NULL default '',
	
		PRIMARY KEY(`author_id`)
	
		) TYPE=MyISAM
	在org.together.om包下会有一个BaseAuthor类(由于生成的PO比较多在下面会详细介绍),这个类中会有如下的属性与Table中的字段进行对应。