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

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

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

    posts - 262,  comments - 221,  trackbacks - 0

    根據(jù)Informa的API說法,Informa提供了基于數(shù)據(jù)庫的持久化方式,這些持久化方法是通過Hibernate支持的。首先從Informa的源代碼包的build.xml開始追蹤。關(guān)于Informa的持久化,在Informa的zip包下有兩個(gè)文件和兩個(gè)目錄需要注意:

     A.build.xml:Ant腳本文件
     B.build.properties-template:Ant腳本文件需要用到的屬性文件模板
     C.config目錄:包含了hibernate.properties文件模板
     D.sql目錄:其下的schema目錄包含了hsqldb,mysql,postgres數(shù)據(jù)庫的ddl和屬性文件


    ★Informa的數(shù)據(jù)庫構(gòu)建過程

    在Informa的build.xml文件中,有3個(gè)target是和數(shù)據(jù)庫DDL相關(guān)的,它們分別是:
     A.hibernate.initdb:初始化數(shù)據(jù)庫連接
     B.hibernate.dbscheme.generate:根據(jù)用戶的指定生成對(duì)應(yīng)的ddl文件 
     C.hibernate.dbscheme:把hbm文件導(dǎo)出成為ddl文件

    這三個(gè)target的執(zhí)行順序是:
     initdb--->dbscheme.generate--->dbscheme 或者
     initdb--->dbscheme

    其中dbscheme是關(guān)鍵,它的主要工作包括:
     A.創(chuàng)建用于保存DDL輸出結(jié)果的scripts目錄
     B.定義一個(gè)名為schemaexport的Ant task,用于把hbm文件導(dǎo)出為ddl文件
     C.執(zhí)行schemaexport任務(wù),把classes目錄下的hbm文件export成DDL,并輸出到指定的位置
     D.輸出執(zhí)行結(jié)果信息


    為了盡量避免在Ant腳本中hardcode一些設(shè)置值,Ant腳本通過下列語句來引入屬性文件

      <!-- Read in (optional) external file with local property settings -->
      
    <property file="build.properties"/>

    build.properties文件是build.properties-template文件的runtime版,使用者去掉template后綴,然后根據(jù)需要修改,在運(yùn)行時(shí)Ant會(huì)自動(dòng)讀取該屬性文件的內(nèi)容,然后應(yīng)用到后面引用到這些屬性的地方。

    Ant中允許自定義任務(wù),這個(gè)功能通過taskdef標(biāo)記來完成

        <taskdef name="schemaexport"
                 classname
    ="org.hibernate.tool.hbm2ddl.SchemaExportTask">
          
    <classpath>
            
    <pathelement location="${build.classes}"/>
            
    <path refid="hibernate.classpath"/>
          
    </classpath>
        
    </taskdef>

    這個(gè)task通過Hibernate的內(nèi)置的SchemaExportTask來完成。我們要給他制定classpath路徑。定義完了任務(wù)后,就可以在下面使用它了

        <schemaexport properties="${hibernate.prop.file}"
                      quiet
    ="yes"
                      drop
    ="no"
                      text
    ="yes"
                      delimiter
    =";"
                      output
    ="${hibernate.schema.file}">
          
    <fileset refid="hibernate.mapping.files"/>
        
    </schemaexport>

    這個(gè)任務(wù)中,properties屬性指定了hibernate.properties文件,output指定了最終ddl的輸出位置。當(dāng)這個(gè)任務(wù)執(zhí)行時(shí),會(huì)根據(jù)hibernate.properties文件中指定的數(shù)據(jù)庫連接和方言,在classes目錄下搜索hbm文件,然后在scripts目錄下生成對(duì)應(yīng)的ddl文件。

    而對(duì)于
    hibernate.dbscheme.generate這個(gè)target,最主要的就是下面這個(gè)片段
        <!-- Hypersonic SQL: Replace hibernate settings with dialect specific -->
        
    <copy file="sql/schema/hsqldb/hsqldb-dialect.properties" 
              tofile
    ="${build.classes}/hibernate.properties" overwrite="true"/>

        
    <antcall target="hibernate.dbscheme">
          
    <param name="hibernate.schema.file" value="sql/schema/hsqldb/hsqldb-hibernate.ddl"/>
        
    </antcall>
        
        
    <!-- MySQL: Replace hibernate settings with dialect specific -->
        
    <copy file="sql/schema/mysql/mysql-dialect.properties" 
              tofile
    ="${build.classes}/hibernate.properties" overwrite="true"/>

        
    <antcall target="hibernate.dbscheme">
          
    <param name="hibernate.schema.file" value="sql/schema/mysql/mysql-hibernate.ddl"/>
        
    </antcall>
        
        
    <!-- PostgreSQL: Replace hibernate settings with dialect specific -->
        
    <copy file="sql/schema/postgres/postgres-dialect.properties" 
              tofile
    ="${build.classes}/hibernate.properties" overwrite="true"/>

        
    <antcall target="hibernate.dbscheme">
          
    <param name="hibernate.schema.file" value="sql/schema/postgres/postgres-hibernate.ddl"/>
        
    </antcall>

    它使用sql/scheme下的各個(gè)數(shù)據(jù)庫的配置文件來覆蓋hibernate.properties文件,然后通過antcall target="hibernate.dbscheme"這個(gè)task來調(diào)用上面講到的生成ddl過程。


    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2009-12-23 10:45 Paul Lin 閱讀(1343) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    <2009年12月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 久久被窝电影亚洲爽爽爽| 深夜A级毛片视频免费| 国产自偷亚洲精品页65页| 麻豆一区二区免费播放网站| 三级黄色片免费看| 狼色精品人妻在线视频免费| 亚洲人成网站看在线播放| 亚洲国产精品自在在线观看| 亚洲人成色777777在线观看| 亚洲国产成人久久综合一区77| 午夜无遮挡羞羞漫画免费| 国产高清不卡免费在线| 亚洲欧洲高清有无| xxx毛茸茸的亚洲| 亚洲AV无码专区国产乱码4SE| 亚洲无码高清在线观看| 国产成人免费手机在线观看视频| 无码人妻一区二区三区免费| 91久久精品国产免费直播| 男人的天堂网免费网站| 在线观看免费无码专区| 中国内地毛片免费高清| 国产乱子伦精品免费视频| 2022免费国产精品福利在线| 成人免费观看男女羞羞视频| 看成年女人免费午夜视频| 亚洲AV无码专区在线厂| 精品国产亚洲第一区二区三区| 亚洲欧美黑人猛交群| 亚洲成av人在线观看网站| 亚洲国产欧洲综合997久久| 亚洲偷自拍另类图片二区| 久久夜色精品国产噜噜亚洲a| 亚洲AV无码无限在线观看不卡| 亚洲AV无码一区二区三区人| 波多野结衣亚洲一级| 最新亚洲卡一卡二卡三新区| 亚洲精品天堂成人片AV在线播放 | 亚洲一卡2卡3卡4卡国产网站| 亚洲成电影在线观看青青| 亚洲一区免费在线观看|