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

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

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

    First they ignore you
    then they ridicule you
    then they fight you
    then you win
        -- Mahatma Gandhi
    Chinese => English     英文 => 中文             
    隨筆-221  評論-1047  文章-0  trackbacks-0
    GORM就是以前我剛學(xué)Groovy沒多久時想實現(xiàn)的功能,它使開發(fā)人員不需要關(guān)心數(shù)據(jù)庫方面,也不需要任何配置,只需專心用OO思想設(shè)計自己的系統(tǒng),還有一個好處就是開發(fā)時不用備份數(shù)據(jù)庫,因為GORM會自動幫你建表以及約束(但數(shù)據(jù)庫需要你自己建),讓我們來看一下用Grails開發(fā)是多么簡單高效吧!

    在Grails0.6+中,配置稍有不同,詳見 朝花夕拾——Groovy & Grails

    在寫域類時,無須添加與業(yè)務(wù)無關(guān)的屬性,比如在用Hibernate時,我們需要(不強(qiáng)制)在類中定義id,但用GORM時,id無須自己聲明,GORM會幫我們自動添加id和version。GORM通過反射機(jī)制獲得域類屬性信息決定數(shù)據(jù)庫字段類型,所以在定義域類時不要使用def關(guān)鍵字來定義屬性,務(wù)必明確定義屬性類型,比如在下面的域類Article中,用String來定義content(而不是def content),在默認(rèn)情況下,String映射到數(shù)據(jù)庫中的字段類型是VARCHAR(Date映射到數(shù)據(jù)庫中的字段類型是DATETIME),如果通過類變量contraints定義了String的長度范圍,且長度過長,映射到數(shù)據(jù)庫中的字段類型會變?yōu)門EXT,十分智能。
    eg.
    class Article {
    ? Date dateAdded? // Date 映射到數(shù)據(jù)庫中的字段類型是DATETIME
    ? String content
    ? static constraints = {
    ??? content(blank: false, size: 0..65535) // 如果沒有定義content的大小范圍,它在數(shù)據(jù)庫中類型為VARCHAR最大長度是255,
    ????????????????????????????????????????? // 顯然不滿足我們的需求,這樣定義后,數(shù)據(jù)庫中的字段類型會變?yōu)門EXT
    ? }
    }

    如果將數(shù)據(jù)源<project name>/grails-app/conf/XXXDataSource中的String dbCreate = "update",Grails會自動幫我們同步內(nèi)存和數(shù)據(jù)庫中域類對象的狀態(tài),這點是很方便的,不需要在每次修改對象后,update了(GORM中的save()相當(dāng)于Hibernate中的saveOrUpdate()),其好處猶如Java中,new出一個對象,當(dāng)不再使用此對象時,不需要自行delete一樣。在實際開發(fā)中您就會體會到了。

    下面讓我們看一下GORM中的1:1,1:N,N:1,N:N以及繼承關(guān)系映射:

    1,一對一關(guān)系:

    class Dog {
    ? String name
    ? Tail tail //? 狗有一條尾巴
    }

    class Tail {
    ? float size
    ? Dog owner? //? 尾巴也知道自己屬于那只狗
    }
    現(xiàn)在Dog和Tail的一對一關(guān)系是雙向的,當(dāng)然你也可以去掉Tail類中的owner屬性或Dog類中的tail屬性,使一對一關(guān)系變?yōu)閱蜗虻?br />級聯(lián)刪除:當(dāng)Dog對象被刪除時,則Dog對象所引用的Tail對象也將被相應(yīng)刪除;同樣地,當(dāng)Tail對象被刪除時,Tail對象所引用的Dog對象也將被相應(yīng)刪除。如果你認(rèn)為Tail被切除后,Dog應(yīng)該還活著,即Tail對象刪除后,Tail對象所應(yīng)用的Dog對象不應(yīng)該被刪除,那么我們可以通過在Tail類中聲明類變量belongsTo來實現(xiàn),在這個場景中,我們將Tail改為:
    class Tail {
    ? float size
    ? Dog owner? //? 尾巴也知道自己屬于那只狗
    ? static belongsTo = Dog // 注意是static的
    }
    級聯(lián)更新/保存:當(dāng)Dog對象更新/保存,Dog對象所引用的Trail對象也更新/保存;反之亦然。

    2,一對多多對一關(guān)系:
    class Dog {
    ? String name
    ? static hasMany = [feet: Foot] // 通過聲明類變量hasMany,來定義Dog‘一’這方有多Foot
    }

    class Foot {
    ? float size
    ? Dog owner
    ? static belongsTo = Dog // 在一對多,多對一關(guān)系中,默認(rèn)‘多’方belongsTo‘一’方
    }
    關(guān)于保存,更新和刪除與一對一關(guān)系相同,都是級聯(lián)更新/保存和級聯(lián)刪除,當(dāng)Dog被刪除時,由于Foot belongsTo(屬于) Dog,所以Dog對象所引用的所有Foot對象全被刪除;而當(dāng)Foot對象被刪除時,Dog對象不會被刪除。這是通過類變量belongsTo實現(xiàn)的。

    3,多對多關(guān)系:
    class Teacher {
    ? String name
    ? static hasMany = [students: Student]
    }

    class Student {
    ? String name
    ? static hasMany = [teachers: Teacher]
    ? static belongsTo = Teacher? // 在多對多關(guān)系中,至少有一方聲明類變量belongsTo
    }
    更新/保存在多對多關(guān)系中,相對一對一,一對多,多對一關(guān)系中要特殊點,就是只有‘擁有方’可以級聯(lián)更新/保存,比如在本例中,由于Student belongsTo Teacher ,所以Teacher是‘擁有方’,Teacher的更新/保存將引起Teacher對象所引用的所有Student對象的更新/保存。
    刪除也有點特殊,‘擁有方’被刪除后,它所引用的對象不會被刪除,你必須自己刪除它們,否則它們將成為‘孤兒’

    4,繼承關(guān)系:
    class Base {...}
    class Derived extends Base {...}
    只要定義類,無需任何配置,夠簡單吧。

    用Grails開發(fā)就是這么簡單快捷,域類定義好了之后,剩下的事情,比如建表,約束等,Grails全幫您自動搞定,很省心!Grails官方網(wǎng)站上有很多文檔供參考,對GORM的進(jìn)一步學(xué)習(xí),您可以看一下GORM

    附:Groovy輕松入門--Grails實戰(zhàn)基礎(chǔ)篇

    posted on 2007-04-05 14:27 山風(fēng)小子 閱讀(7304) 評論(16)  編輯  收藏 所屬分類: Groovy & Grails
    主站蜘蛛池模板: 亚洲国产精品无码专区| 免费人成在线观看网站视频| 久久久久久久亚洲精品| 久久人午夜亚洲精品无码区 | 亚洲国产婷婷六月丁香| 二区久久国产乱子伦免费精品| 国产亚洲?V无码?V男人的天堂 | 天堂亚洲国产中文在线| 国产精品色午夜免费视频| 国产精品国产亚洲区艳妇糸列短篇| 国产精品成人无码免费| 日本永久免费a∨在线视频| 亚洲精品国产精品国自产观看| 一级毛片免费不卡直观看| 好看的亚洲黄色经典| 91高清免费国产自产拍2021| 亚洲人成7777影视在线观看| 成年女人毛片免费播放人| 免费亚洲视频在线观看| 亚洲精品无码鲁网中文电影| 最近2019免费中文字幕视频三| 亚洲伊人久久精品| 四虎永久成人免费| 日韩精品无码免费专区午夜不卡| 狠狠色伊人亚洲综合成人| 亚洲一区在线免费观看| 18禁亚洲深夜福利人口| 亚洲精品无码久久久影院相关影片| 222www免费视频| 羞羞网站免费观看| 亚洲人成电影在在线观看网色| 成年女人男人免费视频播放| 黄桃AV无码免费一区二区三区| 久久综合亚洲色HEZYO社区| 韩国18福利视频免费观看| 免费看无码特级毛片| 亚洲无码一区二区三区 | 国产一精品一aⅴ一免费| 国产精品免费AV片在线观看| 亚洲精品二三区伊人久久| 在线观看国产区亚洲一区成人 |