<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)驗,分享JAVA帶來的快樂!本網(wǎng)站部分轉(zhuǎn)載文章,如果有版權(quán)問題請與我聯(lián)系。

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

    1  Torque簡介

    Torque是Apache的公開源代碼項目,最開始是Turbine框架的組成部分,后面被獨(dú)立出來作為一個單獨(dú)的組件,歸入了Apache的DB項目下。目前最新的版本是3.3。Torque的主要功能是實現(xiàn)對數(shù)據(jù)庫的訪問,方式是通過生成訪問數(shù)據(jù)庫的資源(包括創(chuàng)建數(shù)據(jù)庫、表和初始化表的sql語句)和java代碼、提供使用這些代碼訪問數(shù)據(jù)庫的運(yùn)行時(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ù)庫時的代碼片段,相信大家可以很清晰的感覺到他們之間的差異。

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

    下面這段代碼實現(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,主要是因為使用SqlServer或者其它如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%來表示這個目錄)目錄中。

    然后請下載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),然后解壓縮到同一個目錄中,作者使用了E:\test\torque目錄(后面章節(jié)將使用%Torque_home%來表示這個目錄)。

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

    2.2  演示例子說明

    作者的演示例子使用了一個簡單的數(shù)據(jù)庫,它包括三個表: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ù)庫時的文件內(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ū)動類
    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ū)動類、數(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

    這個配置文件是使用Toorque訪問數(shù)據(jù)庫時初始化環(huán)境需要用到的一些配置內(nèi)容,下面是作者使用MySql作為目的數(shù)據(jù)庫時的配置文件內(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ù)庫連接的時間
    torque.defaults.pool.connectionWaitTimeout = 10
    # 數(shù)據(jù)庫連接池中的最大連接數(shù)
    torque.defaults.pool.defaultMaxConnections = 80
    # 數(shù)據(jù)庫連接在連接池中的最大存在時間
    torque.defaults.pool.maxExpiryTime = 3600
    # 數(shù)據(jù)源的連接驅(qū)動類
    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

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

    這個文件用于描述project-schema.xml中相關(guān)ID內(nèi)容的增長特性,它用于指導(dǎo)Torque生成id_table表,他保存了project-schema.xml中相關(guān)ID自動增長的相關(guān)內(nèi)容,實現(xiàn)類似于Oracle中的Sequence的功能。下面是演示實例的對應(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ù)后面的兩個XML文件生成自動建立數(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ū)動的.jar文件。

    3  生成訪問資源

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

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

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

    ant -f build-torque.xml

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

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

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

    ant -f build-torque.xml create-db

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

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

    使用Ant來執(zhí)行下面的代碼,他會幫您自動建立數(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)自動形成了,所有的代碼位于%torque_home%/src/java目錄下,寫一個簡單的例子測試一下吧。

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

    下面是作者寫的一個測試用例,它放在%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í)行時將會獲得一個"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í)行

    請建立一個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í)行這個批處理文件了。

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

    執(zhí)行4.1中建立的那個批處理文件,然后打開數(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í)慣和方式處理,而且整個過程我們不再需要使用任何的Sql語句。如果你喜歡的話,你還可以借助Torque來幫助您建立數(shù)據(jù)庫、表和使用它提供的ID自增長特性,而不需要自己來處理這些信息。

    5.2  局限性

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

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

    2.如果你的數(shù)據(jù)庫表結(jié)構(gòu)在項目進(jìn)行中經(jīng)常需要修改,那么使用Torque就有些局限了,因為Torque生成的訪問數(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的公開源代碼項目,用于生成訪問數(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ù)庫的整個操作過程,另外給出了使用Microsoft SqlServer作為目的數(shù)據(jù)庫時需要注意的一些地方。希望能夠幫助大家了解和掌握Torque的作用機(jī)制、實現(xiàn)原理和方式,同時希望大家能夠結(jié)合自己應(yīng)用的情況和Torque的特性合理的抉擇在何種情況下使用Torque,讓Torque能夠助您輕松的實現(xiàn)數(shù)據(jù)庫訪問。

    參考資料

    關(guān)于作者

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

    posted on 2007-11-14 14:57 rogerfan 閱讀(953) 評論(0)  編輯  收藏 所屬分類: 【Java知識】 、【開源技術(shù)】
    主站蜘蛛池模板: 一二三四在线观看免费中文在线观看| 亚洲国产av玩弄放荡人妇| 皇色在线视频免费网站| 成人亚洲国产精品久久| 亚洲福利视频一区二区三区| 亚洲自偷自偷偷色无码中文| 午夜无遮挡羞羞漫画免费| 真正全免费视频a毛片| 亚洲精品自在线拍| 国内精品99亚洲免费高清| 四虎永久在线精品免费影视 | 中文字幕亚洲第一在线| 免费看国产一级片| 手机在线毛片免费播放| 国产香蕉九九久久精品免费| 少妇太爽了在线观看免费视频| 亚洲国产婷婷香蕉久久久久久| 亚洲一级毛片视频| 亚洲精品永久www忘忧草| 亚洲乱亚洲乱淫久久| 亚洲电影一区二区| 亚洲AV无码欧洲AV无码网站| 天堂亚洲免费视频| 亚洲精品国产精品乱码不卡 | 亚洲高清无码专区视频| 亚洲精品99久久久久中文字幕| 免费毛片毛片网址| 日本永久免费a∨在线视频| 男男黄GAY片免费网站WWW| caoporn国产精品免费| 青柠影视在线观看免费高清| 中文字幕在线观看免费视频| 亚洲大片免费观看| 国产免费久久精品| 香蕉蕉亚亚洲aav综合| 四虎必出精品亚洲高清| 精品多毛少妇人妻AV免费久久| 久久精品国产亚洲AV高清热| 亚洲综合男人的天堂色婷婷| 蜜臀亚洲AV无码精品国产午夜.| 亚洲成a人片在线观看日本麻豆|