<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
    • 摘要:GORM就是以前我剛學Groovy沒多久時想實現的功能,它使開發人員不需要關心數據庫方面,也不需要任何配置,只需專心用OO思想設計自己的系統,還有一個好處就是開發時不用備份數據庫,因為GORM會自動幫你建表以及約束(但數據庫需要你自己建),讓我們來看一下用Grails開發是多么簡單高效吧!

    在寫域類時,無須添加與業務無關的屬性,比如在用Hibernate時,我們需要(不強制)在類中定義id,但用GORM時,id無須自己聲明,GORM 會幫我們自動添加id和version。GORM通過反射機制獲得域類屬性信息決定數據庫字段類型,所以在定義域類時不要使用def關鍵字來定義屬性,務必明確定義屬性類型,比如在下面的域類Article中,用String來定義content(而不是def content),在默認情況下,String映射到數據庫中的字段類型是VARCHAR(Date映射到數據庫中的字段類型是DATETIME),如果通過類變量contraints定義了String的長度范圍,且長度過長,映射到數據庫中的字段類型會變為TEXT,十分智能。

     

    eg.
                class Article {
                Date dateAdded  // Date 映射到數據庫中的字段類型是DATETIME
                String content
                static constraints = {
                content(blank: false, size: 0..65535) 
    // 如果沒有定義content的大小范圍,它在數據庫中類型為VARCHAR最大長度是255,
                // 顯然不滿足我們的需求,這樣定義后,數據庫中的字段類型會變為TEXT
                }
                }
                

    如果將數據源 /grails-app/conf/XXXDataSource中的String dbCreate = "update",Grails會自動幫我們同步內存和數據庫中域類對象的狀態,這點是很方便的,不需要在每次修改對象后,update了(GORM中的 save()相當于Hibernate中的saveOrUpdate()),其好處猶如Java中,new出一個對象,當不再使用此對象時,不需要自行 delete一樣。在實際開發中您就會體會到了。
    下面讓我們看一下GORM中的1:1,1:N,N:1,N:N以及繼承關系映射:

    1,一對一關系:

     

    class Dog {
                String name
                Tail tail //  狗有一條尾巴
                }
                class Tail {
                float size
                Dog owner  //  尾巴也知道自己屬于那只狗
                }
                
    現在Dog和Tail的一對一關系是雙向的,當然你也可以去掉Tail類中的owner屬性或Dog類中的tail屬性,使一對一關系變為單向的級聯刪除:當Dog對象被刪除時,則Dog對象所引用的Tail對象也將被相應刪除;同樣地,當Tail對象被刪除時,Tail對象所引用的Dog對象也將被相應刪除。如果你認為Tail被切除后,Dog應該還活著,即Tail對象刪除后,Tail對象所應用的Dog對象不應該被刪除,那么我們可以通過在 Tail類中聲明類變量belongsTo來實現,在這個場景中,我們將Tail改為:
    class Tail {
                float size
                Dog owner  //  尾巴也知道自己屬于那只狗
                static belongsTo = Dog // 注意是static的
                }
                

     

    級聯更新/保存:當Dog對象更新/保存,Dog對象所引用的Trail對象也更新/保存;反之亦然。
    2,一對多多對一關系:

     

    class Dog {
                String name
                static hasMany = [feet: Foot] // 通過聲明類變量hasMany,來定義Dog‘一’這方有多Foot
                }
                class Foot {
                float size
                Dog owner
                static belongsTo = Dog // 在一對多,多對一關系中,默認‘多’方belongsTo‘一’方
                }
                

    關于保存,更新和刪除與一對一關系相同,都是級聯更新/保存和級聯刪除,當Dog被刪除時,由于Foot belongsTo(屬于) Dog,所以Dog對象所引用的所有Foot對象全被刪除;而當Foot對象被刪除時,Dog對象不會被刪除。這是通過類變量belongsTo實現的。

    3,多對多關系:

    class Teacher {
                String name
                static hasMany = [students: Student]
                }
                class Student {
                String name
                static hasMany = [teachers: Teacher]
                static belongsTo = Teacher
                // 在多對多關系中,至少有一方聲明類變量belongsTo
                }
                

    更新/保存在多對多關系中,相對一對一,一對多,多對一關系中要特殊點,就是只有‘擁有方’可以級聯更新/保存,比如在本例中,由于Student belongsTo Teacher ,所以Teacher是‘擁有方’,Teacher的更新/保存將引起Teacher對象所引用的所有Student對象的更新/保存。


    刪除也有點特殊,‘擁有方’被刪除后,它所引用的對象不會被刪除,你必須自己刪除它們,否則它們將成為‘孤兒’

    4,繼承關系:
    class Base {...}
    class Derived extends Base {...}
    只要定義類,無需任何配置,夠簡單吧。
    用Grails開發就是這么簡單快捷,域類定義好了之后,剩下的事情,比如建表,約束等,Grails全幫您自動搞定,很省心!Grails官方網站上有很多文檔供參考,對GORM的進一步學習,您可以看一下GORM

    posted on 2008-12-04 10:40 rogerfan 閱讀(268) 評論(0)  編輯  收藏 所屬分類: 【Groovy學習】
    主站蜘蛛池模板: 免费在线视频一区| 久久久久亚洲精品无码蜜桃| 东北美女野外bbwbbw免费| 亚洲人成网站影音先锋播放| 性色av免费观看| 美女网站在线观看视频免费的 | 亚洲无码在线播放| 在线观看www日本免费网站| 成人婷婷网色偷偷亚洲男人的天堂| 在线观看国产区亚洲一区成人| 亚洲一级毛片免费在线观看| 免费精品久久久久久中文字幕| 亚洲国产精品国自产电影| 国产免费小视频在线观看| 亚洲一区二区在线免费观看| 天天综合亚洲色在线精品| 亚洲日本一区二区三区| 啊v在线免费观看| 日韩免费一区二区三区在线| 国产美女视频免费观看的网站| 亚洲香蕉久久一区二区三区四区| 中文字幕人成人乱码亚洲电影| 日本午夜免费福利视频| 91青青国产在线观看免费| 国产成人无码精品久久久免费| 亚洲av永久无码精品三区在线4| 国产AV无码专区亚洲AVJULIA| 在线视频免费国产成人| 久久午夜夜伦鲁鲁片免费无码影视| 国产免费伦精品一区二区三区| 亚洲AV永久无码精品一福利| 亚洲无线一二三四区| 亚洲av永久无码精品秋霞电影影院| 免费一级黄色毛片| 免费无码一区二区三区蜜桃大| 免费观看激色视频网站(性色)| 免费人成毛片动漫在线播放 | a级毛片在线免费看| 免费看一级毛片在线观看精品视频| 国产精品亚洲四区在线观看| 亚洲欧洲自拍拍偷午夜色|