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

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

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

    posts - 70,comments - 408,trackbacks - 0

           Hibernate的持久化類使用的是JavaBean的風格,為要被訪問的屬性提供了一套get和set方法,這兩個方法也叫做持久化類的訪問方法.記得曾經在接觸JavaBean的時候我很迷糊,總覺得提供這兩個方法,倒不如把Bean的屬性設置public,然后直接調用對象.屬性,這樣來的方便.但是后來,有一個這樣的需求,就是一個人名字可以被查看,但是不可以修改.這個時候如果用set方法的話,只需要把set方法的修飾符換為private就OK了.如果是用對象.屬性的形式調用就麻煩了.而且最重要的一個有點是JavaBean的風格可以簡化Hibernate通過JAVA反射機制來獲得持久化類的訪問方法的過程,至于JAVA的反射機制我也是了解一些皮毛.據說很深奧.有興趣的朋友可以Google一下.有一點值得注意,就是JAVA應用程序不能訪問JavaBean持久化類的private類型的get,set方法.而Hibernate沒有這個限制,可以訪問所有的級別.包括private default,protected,public.
          Java有8種基本類型:byte,short,char,int,long,float,double,boolean,還有8種與之對應的包裝類型,Byte,Short,Character,Integer,Long,Float,Double,Boolean包裝類型就是把基本類型包裝成對象的意思.基本類型于包裝類型之間可以方便的轉換,例如:
          int i = 0;
          Integer ie = new Integer(i);//基本類型轉換成包裝類型
          i = ie.intValue();//包裝類型轉化成基本類型

          注意,直接轉換也是可以的.例如i = ie; JAVA會自動把包裝類型轉換成基本類型.或者ie = i; JAVA會自動把基本類型轉換成包裝類型.在持久化類中,既可以把屬性定義為基本類型,也可以定義為包裝類型,他們對應的Hibernate映射類型int和Integer都對應int類型,這個表示不是很明顯,在用JAVA對象類型字符串舉例String,數據庫是varhcar(50),在hibernate的*.hbm.xml映射文件里一律寫為string.其實使用基本類型或者包裝類型來定義持久化類中的屬性是各有優缺點的.基本類型就是使用方便,簡單,在需要數字運算的時候直接可以運算.而包裝類型就要麻煩的先轉換成基本類型,然后在進行運算,但是包裝類型的優點在于能表達null值,每一個包裝類型的對象創建的時候默認值都是null類型的.而基本類型是不可以表達null的,它們的默認值是0.為什么要表達null值呢.因為SQL中.所有類型的數據,默認值都是null的.當進入insert的時候,沒有復值的屬性,默認值就是null,所以說JAVA的包裝類型和數據庫之間的對應關系更直接.這里建議Hibernate的OID設置為包裝類型,其他的屬性就根據業務需要和個人習慣來定吧.
          Hibernate在初始化階段會根據映射文件的信息,為所有的持久化類預定義insert語句,update語句where ID,delete語句where ID,select語句where ID,這里所說的語句就是標準的SQL增,刪,改,查.語句,參數用?代表JDBC PreparedStatement中的參數,這里就不舉例了.這些SQL語句都存放在SessionFactory的緩存中,當執行Session的save(),update(),delete(),load()方法時,將會從SessionFactory的緩存中讀取這些預定義的SQL語句,在把具體的參數值綁定到SQL語句中,這就是Hibernate的基本原理.在默認的情況下這些語句表達的是所有的字段.當然Hibernate還允許我們在映射文件里控制insert和update語句的內容.比如在映射文件中<property 元素中的update屬性設置成為false,那么這個字段,將不被包括在基本的update語句中,修改的時候,將不包括這個字段了.insert同理.dynamic動態SQL語句的配置也是很常用的.下面介紹配置SQL語句的具體屬性:
          1)<property>元素 insert屬性:設置為false,在insert語句中不包含這個字段,表示永遠不會被插入,默認true
          2)<property>元素 update屬性:設置為false,在update語句中不包含這個字段,表示永遠不會被修改,默認true
          3)<class>元素 mutable屬性:設置為false就是把所有的<property>元素的update屬性設置為了false,說明這個對象不會被更新,默認true
          4)<property>元素 dynamic-insert屬性:設置為true,表示insert對象的時候,生成動態的insert語句,如果這個字段的值是null就不會加入到insert語句當中.默認false
          5)<property>元素 dynamic-update屬性,設置為true,表示update對象的時候,生成動態的update語句,如果這個字段的值是null就不會被加入到update語句中,默認false
          6)<class>元素 dynamic-insert屬性:設置為true,表示把所有的<property>元素的dynamic-insert屬性設置為true,默認false
          7)<class>元素 dynamic-update屬性:設置為true,表示把所有的<property>元素的dynamic-update屬性設置為true,默認false

          Hibernate生成動態SQL語句的消耗的系統資源(比如CPU,內存等)是很小的,所以不會影響到系統的性能,如果表中包含N多字段,建議把dynamic-update屬性和insert屬性設置為true,這樣在插入和修改數據的時候,語句中只包括要插入或者修改的字段.可以節省SQL語句的執行時間,提高程序的運行效率.
          

    posted on 2007-05-21 15:21 我心依舊 閱讀(5419) 評論(2)  編輯  收藏

    FeedBack:
    # re: Hibernate ORM 對象-關系 映射
    2007-05-22 23:54 | 熱門單曲
    在此
    有才樓主 路頂下  回復  更多評論
      
    # re: Hibernate ORM 對象-關系 映射
    2008-10-15 13:11 |
    謝謝樓主!剛看見你的貼子,我的問題就解決了!  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产成人手机在线电影bd| 亚洲成a人片在线观看日本麻豆| 亚洲国产另类久久久精品| 中美日韩在线网免费毛片视频| 免费a级毛片在线观看| 阿v视频免费在线观看| 亚洲高清免费视频| 久久国产精品免费| 亚洲va无码va在线va天堂| 日韩午夜理论免费TV影院| 西西人体44rt高清亚洲| 24小时在线免费视频| 97久久国产亚洲精品超碰热| 成人黄18免费视频| 国产亚洲综合视频| 日韩va亚洲va欧洲va国产| 全部免费毛片在线播放| 亚洲视频一区二区三区四区| 日本免费电影一区| 精品乱子伦一区二区三区高清免费播放| 亚洲人成伊人成综合网久久久| 国产精成人品日日拍夜夜免费| 亚洲电影免费观看| 夜夜嘿视频免费看| gogo免费在线观看| 久久综合亚洲鲁鲁五月天| 天天干在线免费视频| 九九全国免费视频| 亚洲精品电影在线| 欧洲精品免费一区二区三区| 久久久精品视频免费观看| 亚洲美女自拍视频| 又爽又黄无遮挡高清免费视频| 美女网站在线观看视频免费的| 亚洲国产日韩在线人成下载| 国产91在线免费| 午夜影院免费观看| 在线观看亚洲精品专区| 亚洲卡一卡2卡三卡4卡无卡三| 超pen个人视频国产免费观看| 中国一级特黄高清免费的大片中国一级黄色片 |