<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA—咖啡館

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

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

    1  Torque簡(jiǎn)介

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

    目前Torque支持的數(shù)據(jù)庫包括mysql、oracle、sqlserver、db2等,還包括對(duì)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,如果按照作者的過程行不通,請(qǐng)確認(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è)目錄)目錄中。

    然后請(qǐng)下載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è)目錄)。

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

    2.2  演示例子說明

    作者的演示例子使用了一個(gè)簡(jiǎn)單的數(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ù)庫,那么請(qǐng)修改里面的相關(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í)對(duì)應(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ù)庫以及如何編寫該文檔,請(qǐng)大家參考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)容的增長(zhǎng)特性,它用于指導(dǎo)Torque生成id_table表,他保存了project-schema.xml中相關(guān)ID自動(dòng)增長(zhǎng)的相關(guān)內(nèi)容,實(shí)現(xiàn)類似于Oracle中的Sequence的功能。下面是演示實(shí)例的對(duì)應(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),所以需要自己手工建立相對(duì)應(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  測(cè)試一下

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

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

    下面是作者寫的一個(gè)測(cè)試用例,它放在%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í)行

    請(qǐng)建立一個(gè)build-run.cmd(位于%Torque_home%目錄下)的批處理文件來編譯和執(zhí)行torque生成的java代碼和自己編寫的測(cè)試類,它的內(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自增長(zhǎng)特性,而不需要自己來處理這些信息。

    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)于作者

    簡(jiǎn)介:肖菁目前是湖南省長(zhǎng)沙鐵道學(xué)院科創(chuàng)計(jì)算機(jī)系統(tǒng)集成有限公司軟件中心軟件工程師,IBM developerworks/BEA dev2dev撰稿人,主要研究J2EE編程技術(shù)、Web Service技術(shù)以及他們?cè)趙ebsphere、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 閱讀(953) 評(píng)論(0)  編輯  收藏 所屬分類: 【Java知識(shí)】【開源技術(shù)】
    主站蜘蛛池模板: 亚洲一级特黄大片在线观看 | 亚洲嫩草影院在线观看| 国产成人啪精品视频免费网| 久久久久高潮毛片免费全部播放| 免费播放国产性色生活片| 久久精品亚洲AV久久久无码| 国产亚洲精品拍拍拍拍拍| 国产高清免费在线| 国产精品成人免费视频网站京东| 久久99热精品免费观看动漫| 一级做a爰性色毛片免费| 亚洲色在线无码国产精品不卡| 亚洲精品在线播放| 亚洲乱亚洲乱淫久久| 亚洲女初尝黑人巨高清| 亚洲成a人片在线观看老师| 女人与禽交视频免费看| 成年免费大片黄在线观看岛国| 99久久免费看国产精品| 日韩免费视频一区二区| a视频在线观看免费| japanese色国产在线看免费| 老司机午夜免费视频| 亚洲av无码专区首页| 亚洲乱人伦中文字幕无码| 日韩亚洲国产综合高清| 亚洲AV无码国产精品色| 激情综合亚洲色婷婷五月APP| 亚洲黄色免费网址| 亚洲色图视频在线观看| 久久精品国产亚洲AV无码麻豆| 亚洲AV成人片色在线观看 | APP在线免费观看视频| 成人片黄网站色大片免费观看cn | 亚洲?V乱码久久精品蜜桃| 国产zzjjzzjj视频全免费| 免费人成在线观看网站视频 | 亚洲AV男人的天堂在线观看| 国产午夜亚洲精品| 日本亚洲欧美色视频在线播放| 亚洲aⅴ无码专区在线观看春色 |