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

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

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

    JAVA—咖啡館

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

    BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
      447 Posts :: 145 Stories :: 368 Comments :: 0 Trackbacks
    1.        Torque
    Torque是一個持久框架,也是jakarta的一個子目,原來包括在Turbine框架中,從Turbine2.2Torque被分離出來作一個獨的子目。目前最高版本是3.3
    2.        持久以及持久框架的理解
    持久就是在整個系統(tǒng)中與持久存儲Database,LDAP Server,XML等打交道的部分。持久框架的作用就是使持久層訪問持久介更加方便。如果是訪問Database而建立的持久框架那就又有一個O/R Mapping的概念。O/R Mapping就是建立(Object)系數(shù)據(jù)(R)中的表(不一定是一)的映射。Torque就是這樣起到O/R Mapping作用的持久框架。他使java程序可以方便地通操作普通java象的方式來訪問數(shù)據(jù),甚至不用了解數(shù)據(jù)的相(最好是了解),另一個好是屏蔽數(shù)據(jù)庫類型即可任意更持久框架支持的Database
    3.        Torque的工作原理
       一般在利用O/R Mapping框架開發(fā)候,有三個基本的元即系數(shù)據(jù)中的表(Table)Java中的持久(PO),POTable映射的xml文件(Schema)。
       首先,Torque包含一個generator用來根據(jù)由開發(fā)者配置好的Schema來自生成POTable,就意味著開發(fā)者只要定Schema,POTable就可以自生成了。
       在生成好的POTable以后,開發(fā)者就可以利用POTable訪問了。了達到個目的Torque提供了一個運行時環(huán)境來保的正確運行。在工程中引入了torque.jar就可以個運行環(huán)境了。
    4.        Torque中的包,和接口
    Torque的源提供的是運行環(huán)境,基于Torque開發(fā)關心的是生成的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在會按照一定規(guī)則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數(shù)據(jù),并將生成的PO放到org.together.om包中。   最后利用ant執(zhí)generator,這樣就可以在數(shù)據(jù)中生成相Table,并生成于Table對應PO(放在定好的org.together.om)。拿schema中定Author例,運行generator后可以在mysql數(shù)據(jù)中生成一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包下的也是運行環(huán)境相關的不用考慮。在org.together.om下會為schema中定義的每一個表生成四個相關的類。拿Book來說,有四個類和他對應,分別為:BaseAuthorPeer, AuthorPeer,BaseAuthor, Author。BaseAuthorPeer和BaseAuthor分別是AuthorPeer和Author的基類,在基類里是由generator生成的代碼,注意不要修改基類的代碼,因為每次利用generator生成時都會覆蓋基類的代碼(AuthorPeer和Author類不會被覆蓋)。
    5.3 PO的使用方法
     BaseAuthorPeer和BaseAuthor這兩個基類是用來提供底層功能的,我們只要操作AuthorPeer和Author類就可以完成對數(shù)據(jù)庫中的表author的操作如增加,刪除,更新和查詢等。
     對author進行增加操作的代碼如下:
     Author na = new Author();
     na.setFirstName("a");
     na.setLastName("b");
     na.save();  // 或用AuthorPeer的靜態(tài)方法替代AuthorPeer.doInsert(na);
     對author進行更新操作的代碼如下:
    na.setLastName("c");
    na.save(); //或用AuthorPeer的靜態(tài)方法替代AuthorPeer.doUpdate(na);
    對author進行刪除操作的代碼如下:
    AuthorPeer.doDelete(na); //進行delete時只能使用AuthorPeer的靜態(tài)方法
    對author進行查詢,查詢出author表中的author_id字段的值在1和10000之間的所有數(shù)據(jù)
    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進行開發(fā)的例子。
    6.        TorqueACI中的應用
    看了一下ACI的源碼,torque自動生成的部分沒有任何改動,即都是直接使用生成的PO。但在TorqueACIStorage.java中關于Torque的用法要比上述的例子中多了一個事務處理情況,以下給出使用Torque進行事務處理的例子。
    //創(chuàng)建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學習】
    主站蜘蛛池模板: 抽搐一进一出gif免费视频| 亚洲熟妇久久精品| 国产亚洲一区二区手机在线观看 | 国产麻豆成人传媒免费观看| EEUSS影院WWW在线观看免费| 有码人妻在线免费看片| 永久免费无码网站在线观看个| xxxxx做受大片视频免费| 乱人伦中文视频在线观看免费| 二级毛片免费观看全程| XXX2高清在线观看免费视频| 国产无遮挡无码视频免费软件| 3344在线看片免费| 99re免费视频| A级毛片内射免费视频| 日产乱码一卡二卡三免费| 亚洲成av人片不卡无码久久| 久久久青草青青国产亚洲免观| 亚洲国产另类久久久精品 | 日韩免费福利视频| 免费人成网站7777视频| 自拍偷自拍亚洲精品情侣| 亚洲AV无码国产精品色午友在线| 亚洲网站免费观看| 亚洲精品人成网线在线播放va| 日韩一级片免费观看| 青青草原1769久久免费播放| 69视频免费观看l| 免费特级黄毛片在线成人观看| mm1313亚洲精品国产| 人人狠狠综合久久亚洲88| 亚洲国产精品日韩在线| 国产精品亚洲专区一区| a级片在线免费看| 中文字幕乱码免费视频| 四虎免费久久影院| 亚洲免费视频在线观看| 男人的天堂av亚洲一区2区| 丝瓜app免费下载网址进入ios| 999久久久免费精品国产| 男人的天堂亚洲一区二区三区 |