JAVA—咖啡館

          ——?dú)g迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術(shù),交流工作經(jīng)驗(yàn),分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks

          1  Torque簡介

          Torque是Apache的公開源代碼項(xiàng)目,最開始是Turbine框架的組成部分,后面被獨(dú)立出來作為一個(gè)單獨(dú)的組件,歸入了Apache的DB項(xiàng)目下。目前最新的版本是3.3。Torque的主要功能是實(shí)現(xiàn)對數(shù)據(jù)庫的訪問,方式是通過生成訪問數(shù)據(jù)庫的資源(包括創(chuàng)建數(shù)據(jù)庫、表和初始化表的sql語句)和java代碼、提供使用這些代碼訪問數(shù)據(jù)庫的運(yùn)行時(shí)(runtime)環(huán)境。關(guān)于Torque的詳細(xì)介紹請大家參考http://db.apache.org/torque/。

          目前Torque支持的數(shù)據(jù)庫包括mysql、oracle、sqlserver、db2等,還包括對weblogic的數(shù)據(jù)源的支持,詳細(xì)的支持列表大家可以到http://db.apache.org/torque/查找到,你還可以參考http://db.apache.org/torque/db-adapters.html編寫你自己的數(shù)據(jù)庫支持類。

          1.1  Torque和傳統(tǒng)數(shù)據(jù)庫訪問方式的差異

          下面是兩種方式訪問數(shù)據(jù)庫時(shí)的代碼片段,相信大家可以很清晰的感覺到他們之間的差異。

          1.1.1  傳統(tǒng)數(shù)據(jù)庫訪問

          下面這段代碼實(shí)現(xiàn)向數(shù)據(jù)庫中插入一條記錄:

          Class.forName("%Database_Driver%").newInstance();
          java.sql.Connection connection;
          connection = DriverManager.getConnection(url,userid,pwd);
          Statement statement = connection.createStatement();
          String sql = "";
          statement.ExecuteUpdate("insert into tablename
          values(field_value1, field_value1…)");
          statement.close();
          connection.close();
          

          1.1.2  使用Torque

          下面這段代碼演示了使用Torque后我們插入一條記錄的過程:

          TableOBJ  tableObj = new TableObj();
          tableObj.SetFieldName1(fieldvalue1);
          tableObj.SetFieldName2(fieldvalue2);
          ...
          tableObj.Save();
          

          下面的章節(jié),作者將詳細(xì)的描述如何配置使用Torque的全過程以及需要注意的內(nèi)容。作者選擇了mysql作為目的數(shù)據(jù)庫進(jìn)行操作(中間有一些內(nèi)容提到了SqlServer,主要是因?yàn)槭褂肧qlServer或者其它如oracle、db2等作為目的數(shù)據(jù)庫在某些操作上和使用mysql作為目的數(shù)據(jù)庫有很大的差異,這些地方作者做了特別說明)。

          [注] 作者的演示過程使用ant1.5.1和Torque3.1,如果按照作者的過程行不通,請確認(rèn)工具的版本是否正確。

          2  環(huán)境配置

          2.1  組件下載安裝

          為了使用Ant和Torque,你必須下載安裝Sun提供的J2SE,可以到http://java.sun.com下載J2SE的最新版本。

          在Torque的使用過程中,很多的工作都是通過ant來完成的,所以你需要先下載ant工具包,由于Torque的build-torque.xml中使用了ant中的option特性,所以最好下載ant1.5.1版本,你可以到http://ant.apache.org/下載最新的ant版本。作者下載后解壓縮到c:/ant(后面章節(jié)將使用%ant_home%來表示這個(gè)目錄)目錄中。

          然后請下載Torque的3.1版本(包括http://db.apache.org/builds/torque/release/3.1/torque-3.1.zip和http://db.apache.org/builds/torque/release/3.1/torque-gen-3.1.zip),然后解壓縮到同一個(gè)目錄中,作者使用了E:\test\torque目錄(后面章節(jié)將使用%Torque_home%來表示這個(gè)目錄)。

          安裝完成后,請?jiān)O(shè)置JAVA_HOME環(huán)境變量指向安裝J2SE的目錄,以便各項(xiàng)ant工作能夠順利完成。

          2.2  演示例子說明

          作者的演示例子使用了一個(gè)簡單的數(shù)據(jù)庫,它包括三個(gè)表:author, publisher和 book表。Author表保存書的作者信息,publisher表保存書的出版者信息,而book表保存書的相關(guān)信息如title、ISBN信息等。

          2.3  修改配置文件

          安裝好Torque后,為了讓它成功執(zhí)行,必須配置以下配置文件build.properties、Torque.properties、mybookstore-schema.xml、id-table-schema.xml,下面的章節(jié)詳細(xì)的說明了他們的作用和需要添加的內(nèi)容。

          2.3.1  build.properties

          build.properties文件中設(shè)置了生成訪問數(shù)據(jù)庫需要的資源文件和java代碼需要用到的環(huán)境變量。下面這段是作者使用mysql數(shù)據(jù)庫時(shí)的文件內(nèi)容:

          #工程名稱
          torque.project = bookstore
          #數(shù)據(jù)庫類型
          torque.database = mysql
          #生成java代碼的包特性
          torque.targetPackage = com.chinacreator
          torque.database.createUrl = jdbc:mysql://127.0.0.1:3306/mysql
          #數(shù)據(jù)庫URL
          #注意:數(shù)據(jù)庫名應(yīng)該和工程名保持一致
          torque.database.buildUrl = jdbc:mysql://127.0.0.1:3306/bookstore
          torque.database.url = jdbc:mysql://127.0.0.1:3306/bookstore
          #數(shù)據(jù)庫驅(qū)動(dòng)類
          torque.database.driver = org.gjt.mm.mysql.Driver
          #連接數(shù)據(jù)庫使用的用戶名
          torque.database.user = root
          #連接數(shù)據(jù)庫使用的密碼
          torque.database.password = ioffice
          #數(shù)據(jù)庫的主機(jī)IP
          torque.database.host = 127.0.0.1
          

          如果使用其它的數(shù)據(jù)庫,那么請修改里面的相關(guān)信息如數(shù)據(jù)庫驅(qū)動(dòng)類、數(shù)據(jù)庫URL、訪問數(shù)據(jù)庫的用戶名/密碼等,下面是作者使用microsoft 的SqlServer的配置文件內(nèi)容:

          torque.project = mybookstore
          torque.database = mssql
          torque.targetPackage = com.chinacreator
          torque.database.createUrl =
          jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mysms
          torque.database.buildUrl =
          jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mybookstore
          torque.database.url =
          jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mybookstore
          torque.database.driver =
          com.microsoft.jdbc.sqlserver.SQLServerDriver
          torque.database.user = sa
          torque.database.password = sa
          torque.database.host = 127.0.0.1
          

          2.3.2  Torque.properties

          這個(gè)配置文件是使用Toorque訪問數(shù)據(jù)庫時(shí)初始化環(huán)境需要用到的一些配置內(nèi)容,下面是作者使用MySql作為目的數(shù)據(jù)庫時(shí)的配置文件內(nèi)容:

          #Torque應(yīng)用的根目錄
          torque.applicationRoot = .
          #Torque中的日志信息的設(shè)置,不需要修改
          log4j.category.org.apache.torque = ALL, org.apache.torque
          log4j.appender.org.apache.torque = org.apache.log4j.FileAppender
          log4j.appender.org.apache.torque.file = ${torque.applicationRoot}/logs/torque.log
          log4j.appender.org.apache.torque.layout = org.apache.log4j.PatternLayout
          log4j.appender.org.apache.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
          log4j.appender.org.apache.torque.append = false
          torque.defaults.pool.logInterval = 0
          # 等待數(shù)據(jù)庫連接的時(shí)間
          torque.defaults.pool.connectionWaitTimeout = 10
          # 數(shù)據(jù)庫連接池中的最大連接數(shù)
          torque.defaults.pool.defaultMaxConnections = 80
          # 數(shù)據(jù)庫連接在連接池中的最大存在時(shí)間
          torque.defaults.pool.maxExpiryTime = 3600
          # 數(shù)據(jù)源的連接驅(qū)動(dòng)類
          torque.defaults.connection.driver = org.gjt.mm.mysql.Driver
          # 數(shù)據(jù)源的URL
          torque.defaults.connection.url = jdbc:mysql://localhost:3306/bookstore
          #訪問數(shù)據(jù)的用戶名和密碼
          torque.defaults.connection.user = root
          torque.defaults.connection.password = ioffice
          #默認(rèn)數(shù)據(jù)庫其中及本文件中剩下的bookstore都應(yīng)該和build.peoperties中的工程名保持一致
          torque.database.default=bookstore
          torque.database.bookstore.adapter=mysql
          torque.dsfactory.bookstore.factory =
          org.apache.torque.dsfactory.SharedPoolDataSourceFactory
          torque.dsfactory.bookstore.pool.defaultMaxActive=10
          torque.dsfactory.bookstore.pool.testOnBorrow=true
          torque.dsfactory.bookstore.pool.validationQuery=SELECT 1
          torque.dsfactory.bookstore.connection.driver = org.gjt.mm.mysql.Driver
          torque.dsfactory.bookstore.connection.url =
          jdbc:mysql://localhost:3306/bookstore
          torque.dsfactory.bookstore.connection.user = root
          torque.dsfactory.bookstore.connection.password = ioffice
          torque.idbroker.cleverquantity=true
          torque.manager.useCache = true
          

          2.3.3  project-schema.xml

          這個(gè)文件位于%Torque_home%/schema目錄下,文件名中的project應(yīng)該和build.properties中的工程名保持一致,它主要是描述工程中使用的數(shù)據(jù)庫信息,包括數(shù)據(jù)庫、表、字段的特性等。這里應(yīng)該是bookstore-schema.xml,下面的信息是作者使用mysql時(shí)對應(yīng)的bookstore-schema.xml的內(nèi)容:

          <?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="bookstore"
          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">
          <reference
          local="publisher_id"
          foreign="publisher_id"/>
          </foreign-key>
          <foreign-key foreignTable="author">
          <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>
          

          關(guān)于如何使用該文件描述數(shù)據(jù)庫以及如何編寫該文檔,請大家參考Torque的幫助文檔或者到Torque的網(wǎng)站(http://db.apache.org/torque/)查詢相關(guān)內(nèi)容

          2.3.4  id-table-schema.xml

          這個(gè)文件用于描述project-schema.xml中相關(guān)ID內(nèi)容的增長特性,它用于指導(dǎo)Torque生成id_table表,他保存了project-schema.xml中相關(guān)ID自動(dòng)增長的相關(guān)內(nèi)容,實(shí)現(xiàn)類似于Oracle中的Sequence的功能。下面是演示實(shí)例的對應(yīng)文件:

          <?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="bookstore">
          <table name="ID_TABLE" idMethod="idbroker">
          <column
          name="ID_TABLE_ID"
          required="true"
          primaryKey="true"
          type="INTEGER"/>
          <column
          name="TABLE_NAME"
          required="true"
          size="255"
          type="VARCHAR"/>
          <column
          name="NEXT_ID"
          type="INTEGER"/>
          <column
          name="QUANTITY"
          type="INTEGER"/>
          <unique>
          <unique-column name="TABLE_NAME"/>
          </unique>
          </table>
          </database>
          

          [注] Torque將根據(jù)后面的兩個(gè)XML文件生成自動(dòng)建立數(shù)據(jù)庫、表等的相關(guān)的SQL數(shù)據(jù)和訪問該數(shù)據(jù)庫的java代碼。

          2.4  類路徑

          為了建立使用Torque的相關(guān)環(huán)境,需要將%Torque_home%/lib下面的所有。jar文件,放入classpath中,其他需要加入classpath中的還包括%Torque_home%,%Torque_home%/templates,還有支持訪問數(shù)據(jù)庫的jdbc驅(qū)動(dòng)的.jar文件。

          3  生成訪問資源

          3.1  生成訪問數(shù)據(jù)庫的資源

          1.生成訪問數(shù)據(jù)庫的java代碼

          您可以使用下面的操作來生成訪問數(shù)據(jù)庫的java代碼:

          ant -f build-torque.xml

          這個(gè)操作將順帶產(chǎn)生生成數(shù)據(jù)庫、表等的相關(guān)SQL語句。

          2.自動(dòng)生成數(shù)據(jù)庫

          使用Ant來執(zhí)行下面的代碼,他會(huì)幫您自動(dòng)建立數(shù)據(jù)庫:

          ant -f build-torque.xml create-db

          [注] 如果是使用Microsoft SqlServer,因?yàn)門orque中目前還沒有支持創(chuàng)建數(shù)據(jù)庫的相關(guān)SQL代碼實(shí)現(xiàn),所以需要自己手工建立相對應(yīng)的數(shù)據(jù)庫。

          3.自動(dòng)生成相關(guān)表

          使用Ant來執(zhí)行下面的代碼,他會(huì)幫您自動(dòng)建立數(shù)據(jù)表和一些初始數(shù)據(jù)內(nèi)容:

          ant -f build-torque.xml id-table-init-sql

          ant -f build-torque.xml insert-sql

          4  測試一下

          好了,現(xiàn)在訪問數(shù)據(jù)庫的代碼已經(jīng)自動(dòng)形成了,所有的代碼位于%torque_home%/src/java目錄下,寫一個(gè)簡單的例子測試一下吧。

          [注] 為了使用我們前面已經(jīng)定義的環(huán)境變量設(shè)置,請將%torque_home%/src/java目錄下的所有內(nèi)容拷貝到%torque_home%目錄下。

          下面是作者寫的一個(gè)測試用例,它放在%torque_home%目錄下:

          //引入相關(guān)包和類
          import com.chinacreator.*;
          import org.apache.torque.Torque;
          public class Test
          {
          public void insert(String s)
          throws Exception{
          //使用Torque.properties配置文件初始化Torque
          //如果沒有這一步,你執(zhí)行時(shí)將會(huì)獲得一個(gè)"Torque was not properly initialized"的違例
          Torque.init("Torque.properties");
          //向Publisher中增加一條新的記錄
          Publisher addison = new Publisher();
          addison.setName(s);
          addison.save();
          }
          public static void main(String[] args) throws Exception
          {
          Test t = new Test();
          t.insert("xj");
          }
          }
          

          4.1  編譯執(zhí)行

          請建立一個(gè)build-run.cmd(位于%Torque_home%目錄下)的批處理文件來編譯和執(zhí)行torque生成的java代碼和自己編寫的測試類,它的內(nèi)容如下:

          javac com\chinacreator\*.java
          javac com\chinacreator\map\*.java
          javac Test.java
          java Test
          

          建立好了以后,就可以執(zhí)行這個(gè)批處理文件了。

          4.2  查看執(zhí)行結(jié)果

          執(zhí)行4.1中建立的那個(gè)批處理文件,然后打開數(shù)據(jù)庫,看看publisher表中是否新增加了一條記錄。如果你按照上面的配置和執(zhí)行過程完全成功的話,你就可以看到publisher表中已經(jīng)有了一條記錄,它的publisher_id是1000,name是xj。

          5  優(yōu)點(diǎn)和局限

          5.1  優(yōu)點(diǎn)

          Torque最大的優(yōu)點(diǎn)就是在java訪問數(shù)據(jù)庫的過程中,我們可以按照面向?qū)ο蟮牧?xí)慣和方式處理,而且整個(gè)過程我們不再需要使用任何的Sql語句。如果你喜歡的話,你還可以借助Torque來幫助您建立數(shù)據(jù)庫、表和使用它提供的ID自增長特性,而不需要自己來處理這些信息。

          5.2  局限性

          使用Torque可以很方便的實(shí)現(xiàn)訪問數(shù)據(jù)庫的OO實(shí)現(xiàn),但是作者使用了Torque后,發(fā)覺使用Torque雖然有好處,但是不同的情況下,他的表現(xiàn)還是有很大的差異:

          1.如果你的數(shù)據(jù)庫表結(jié)構(gòu)在項(xiàng)目開始時(shí)已經(jīng)設(shè)計(jì)好,不需要中途修改,那么你可以完全的享受Torque帶來的好處

          2.如果你的數(shù)據(jù)庫表結(jié)構(gòu)在項(xiàng)目進(jìn)行中經(jīng)常需要修改,那么使用Torque就有些局限了,因?yàn)門orque生成的訪問數(shù)據(jù)庫的java代碼都是靜態(tài)的,如果數(shù)據(jù)庫表結(jié)構(gòu)發(fā)生了變化,那么需要重新生成訪問數(shù)據(jù)庫的java代碼,而且所有調(diào)用這些代碼的其他應(yīng)用代碼都需要發(fā)生相應(yīng)的改變。這種情況下使用Torque并不適合。

          6  總結(jié)

          Torque是Apache的公開源代碼項(xiàng)目,用于生成訪問數(shù)據(jù)庫的java代碼。這樣使用Torque的人就可以不再需要編寫SQL語句來訪問數(shù)據(jù)庫,而是完全使用面向?qū)ο蟮姆绞剑ㄓ蒚orque生成的java代碼)來訪問數(shù)據(jù)庫,而且如果你喜歡,你還可以使用Torque來協(xié)助您完成建立數(shù)據(jù)庫、表和相關(guān)的初始化工作。

          本文中作者詳細(xì)的介紹了如何配置環(huán)境變量使Torque能夠正常工作,以及如何使用Torque來生成訪問數(shù)據(jù)庫所需要的資源(java代碼和相關(guān)的SQL語句)、如何使用Torque生成的代碼來訪問數(shù)據(jù)庫。并且給出了使用MySQL作為目的數(shù)據(jù)庫的整個(gè)操作過程,另外給出了使用Microsoft SqlServer作為目的數(shù)據(jù)庫時(shí)需要注意的一些地方。希望能夠幫助大家了解和掌握Torque的作用機(jī)制、實(shí)現(xiàn)原理和方式,同時(shí)希望大家能夠結(jié)合自己應(yīng)用的情況和Torque的特性合理的抉擇在何種情況下使用Torque,讓Torque能夠助您輕松的實(shí)現(xiàn)數(shù)據(jù)庫訪問。

          參考資料

          關(guān)于作者

          簡介:肖菁目前是湖南省長沙鐵道學(xué)院科創(chuàng)計(jì)算機(jī)系統(tǒng)集成有限公司軟件中心軟件工程師,IBM developerworks/BEA dev2dev撰稿人,主要研究J2EE編程技術(shù)、Web Service技術(shù)以及他們在websphere、weblogic、apache平臺(tái)上的實(shí)現(xiàn),擁有IBM 的 Developing With Websphere Studio證書,個(gè)人網(wǎng)站:http://vivianj.go.nease.net/

          posted on 2007-11-14 14:57 rogerfan 閱讀(956) 評論(0)  編輯  收藏 所屬分類: 【Java知識(shí)】【開源技術(shù)】
          主站蜘蛛池模板: 德惠市| 饶平县| 东阿县| 资阳市| 台前县| 洛扎县| 河西区| 北碚区| 新乐市| 湘潭市| 威信县| 金塔县| 沧源| 岚皋县| 山阳县| 吴忠市| 大竹县| 南涧| 垫江县| 柘荣县| 中西区| 巫山县| 望江县| 红桥区| 南澳县| 阿尔山市| 洛南县| 长乐市| 马龙县| 山西省| 博兴县| 措勤县| 和平区| 舟山市| 桂林市| 克拉玛依市| 巴林左旗| 西安市| 东乡| 高雄县| 龙里县|