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

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

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

    JAVA—咖啡館

    ——歡迎訪問rogerfan的博客,常來《JAVA——咖啡館》坐坐,喝杯濃香的咖啡,彼此探討一下JAVA技術,交流工作經驗,分享JAVA帶來的快樂!本網站部分轉載文章,如果有版權問題請與我聯系。

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks
    1.        Torque
    Torque是一個持久框架,也是jakarta的一個子目,原來包括在Turbine框架中,從Turbine2.2Torque被分離出來作一個獨的子目。目前最高版本是3.3
    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),POTable映射的xml文件(Schema)
       首先,Torque包含一個generator用來根據由開發者配置好的Schema來自生成POTable就意味著開發者只要定SchemaPOTable就可以自生成了。
       在生成好的POTable以后,開發者就可以利用POTable訪問了。了達到個目的Torque提供了一個運行時環境來保的正確運行。在工程中引入了torque.jar就可以個運行境了。
    4.        Torque中的包,和接口
    Torque的源提供的是運行境,基于Torque開發關心的是生成的PO的使用方法即怎使用生成的PO來操作Table。下面會通Torque學上的例子來詳細說明。
    5.        學中的例子
    5.1利用generator生成POTable
    首先,要通generator來生成POTable要定Schemagenerator的配置。
     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包中。   最后利用antgenerator這樣就可以在數據中生成相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中的字段對應
    /** The value for the authorId field */
        private int authorId;     
        /** The value for the firstName field */
        private String firstName;
        /** The value for the lastName field */
        private String lastName;
    5.2    generator生成的PO
     在org.together.om下有若干類和一個子包map。map包下的也是運行環境相關的不用考慮。在org.together.om下會為schema中定義的每一個表生成四個相關的類。拿Book來說,有四個類和他對應,分別為:BaseAuthorPeer, AuthorPeer,BaseAuthor, Author。BaseAuthorPeer和BaseAuthor分別是AuthorPeer和Author的基類,在基類里是由generator生成的代碼,注意不要修改基類的代碼,因為每次利用generator生成時都會覆蓋基類的代碼(AuthorPeer和Author類不會被覆蓋)。
    5.3 PO的使用方法
     BaseAuthorPeer和BaseAuthor這兩個基類是用來提供底層功能的,我們只要操作AuthorPeer和Author類就可以完成對數據庫中的表author的操作如增加,刪除,更新和查詢等。
     對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());
    }
    以上介紹了PO的基本用法,在實際的應用中往往比上述要復雜的多,但是掌握了基本的方法,其他的用法就可以在實際使用時查看手冊即可。Torque的doc上附帶的Toturial上面有使用generator的詳細說明和怎樣使用Torque進行開發的例子。
    6.        TorqueACI中的應用
    看了一下ACI的源碼,torque自動生成的部分沒有任何改動,即都是直接使用生成的PO。但在TorqueACIStorage.java中關于Torque的用法要比上述的例子中多了一個事務處理情況,以下給出使用Torque進行事務處理的例子。
    //創建JDBC連接用于控制事務
    java.sql.Connection conn = null;
    try{
       //開始事務
    conn=Transaction.begin(BaseAuthorPeer.getMapBuilder().getDatabaseMap().getName());
    Author ta = new Author();
    ta.setFirstName("t");
    ta.setLastName("t");
    AuthorPeer.doInsert(ta,conn);
    //String ab = null; //人為制造異常使事務回滾
    //ab.toLowerCase();
    Publisher tp = new Publisher();
    tp.setName("t");
    PublisherPeer.doInsert(tp,conn);
    //提交事務,會自動釋放連接
    Transaction.commit(conn);
    } catch (Exception ex) {
    //回滾事務
     Transaction.safeRollback(conn);
     log.error(ex);
    }
    ACI中也有一些復雜一點的查詢條件(Criteria)的構造,在Torquedocs中的criteria-howto.html文件中都應該能夠找到。
    posted on 2008-05-22 11:29 rogerfan 閱讀(1047) 評論(0)  編輯  收藏 所屬分類: 【Torque學習】
    主站蜘蛛池模板: 人妻18毛片a级毛片免费看| 亚洲高清视频在线| 精品国产污污免费网站入口在线| 日韩免费福利视频| 亚洲欧洲专线一区| 成人毛片免费观看视频| 亚洲乱亚洲乱妇无码| 国产精品免费综合一区视频| 亚洲欧美成人一区二区三区| 国产精品免费播放| 搜日本一区二区三区免费高清视频| 亚洲国产日韩在线观频| 男女一边桶一边摸一边脱视频免费| 亚洲尤码不卡AV麻豆| 久久免费动漫品精老司机| 亚洲美女中文字幕| 成人网站免费观看| 美女扒开屁股让男人桶爽免费| 亚洲av中文无码| 久久国产免费观看精品| 亚洲国产精品成人综合色在线婷婷| 三年片在线观看免费观看高清电影| 色婷婷六月亚洲综合香蕉| 亚洲国产精品无码久久九九| 中国好声音第二季免费播放| 久久久婷婷五月亚洲97号色| 成人免费无码大片A毛片抽搐| 黄色一级毛片免费| 亚洲小视频在线观看| 久久综合AV免费观看| www.xxxx.com日本免费| 久久久无码精品亚洲日韩按摩| 免费无码又爽又高潮视频| 精品久久久久久国产免费了| 亚洲国产美女精品久久久久| 国产精品久久久久影院免费| 日本免费高清视频| 男性gay黄免费网站| 久久久久亚洲AV无码麻豆| 国产一级一片免费播放| 中文日本免费高清|