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

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

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

    Terry.Li-彬

    虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks


                                           <meta>元素的屬性
            屬性                                                描述
        class-description                            指定描述類的javaDoc
        field-description                            指定描述類的屬性javaDoc
        interface                                    如果為true,表明生成接口而非類,默認false
        implements                                   指定類所實現的接口
        extends                                      指定繼承的父類名
        generated-class                              重新指定生成的類名
        scope-class                                  指定類的修飾符,默認public
        scope-set                                    指定set方法的修飾符,默認public
        scope-get                                    指定get方法的修飾符,默認public
        scope-field                                  指定類的屬性的修飾符,默認private
        use-in-toString                              如果為true,表示在toString()方法中包含此屬性
        gen-property                                 如果為false,不會在java類中生成此屬性,默認true
        finder-method                                指定find方法名

      
                                         <column>元素屬性
        name                 設定字段名字
        length               設定字段長度
        not-null             如為true,指名該字段不允許為null,默認false
        unique               如為true,指名該字段具有唯一約束,默認false
        index                給一個或多個字段建立索引
        unique-key           為多個字段設定唯一約束
        foreign-key          為外鍵約束命名,在<many-to-many><one-to-one><key><many-to-one>元素中包含
                             foreign-key屬性,在雙向關聯中,inverse屬性為true的一端不能設置foreign-key
        sql-type             設定字段sql類型
        check                設定sql檢查約束

     


                        用于控制insert or update 語句的映射屬性

      <property>元素的insert屬性                  如為false,在insert中不包含該字段,默認為true
      <property>元素的update屬性                  如為false,在update中不包含該字段,默認為true
      <class>元素的mutable屬性                    如為false,等價于所有字段的update屬性為false,默認為true
      <property>元素的dunameic-insert屬性         如為true,表明動態生成insert語句,只有不為null,才會包含insert語句中,默認false
      <property>元素的dunameic-update屬性         如為true,表明動態生成update語句,只有不為null,才會包含insert語句中,默認false
      <class>元素的dunameic-insert屬性            如為true,表明等價于所有字段動態生成insert語句,只有不為null,才會包含insert語句中                                               ,默認false
      <class>元素的dunameic-update屬性            如為true,表明等價于所有字段動態生成update語句,只有不為null,才會包含insert語句中                 ,默認false

     


                     Hibernate提供的內置標識符生成器
        increment   適用于代理主鍵,自動遞增,增1(只能是long,int,short)
        identity    適用于代理主鍵,底層數據庫自動增長字段類型(數據庫需支持,只能是long,int,short)
    (oralce)sequence    適用于代理主鍵,根據底層數據庫的序列來生成標識符(數據庫支持序列,只能是long,int,short)
        hilo        適用于代理主鍵,根據high/low算法來生成.Hibernate把特定表的字段作為high值,在默認情況
                    下選用hibernate_unique_key表的next_hi字段
    (mysql,mssql)native    適用于代理主鍵,根據數據庫自動生成標識符支持能力,來選擇identity,sequence,hilo
        uuid.hex    適用于代理主鍵,采用128位UUID(universal unique identification)算法來生成標識.此算法能在網絡環境中生成唯一的字符串標識符,(不建議使用,字符串類型比整形類型的主鍵占用更多的空間)
        assigned    適用于自然主鍵,由java程序負責生成.

     

    <hibernate-mapping>
      <class name="項目路徑" table="庫中對應表名" schema="dbo" catalog="netoa">
          <meta attribute="class-description">指定描述類的javaDoc</meta>
          <meta attribute="class-scope">指名類的修飾類型</meta>
          <meta attribute="extends">指定繼承類</meta>
             <id name="bgrkbh" type="long">
                <column name="BGRKBH" precision="15" scale="0" sql-type="庫中類型" check="BGRKBH>10"/>
                <meta attribute="scope-set">指定類,類屬性的getxxx(),setxxx()方法的修飾符
                 包括:static,final,abstract,public,protected,private
                </meta>
                <generator class="assigned" />
            </id>
             <property name="Class.fileName" type="long">
                    <column name="YSLX" precision="精度" scale="刻度" not-null="默認false" sql-type="數據庫中類型"/>
                    附加屬性不會影響Hibernate的運行行為
                    <meta attribute="field-description">指定描述類的javaDoc</meta>
                    指定描述類屬性的javaDoc
             </property>
      </class>
    </hibernate-mapping>


    注意:
    1 Session的commit()和flush()方法的區別,flush()方法進行清理緩存的操作,執行一系列的SQL語句,但不會提交事務;
      commit()方法會先調用flush(),然后提交事務.提交事務意味著對數據庫所作的更新被永久保存下來.

    2 Session的setFlushMode()方法用于設定清理緩存的時間點.FlushMode類定義了三種不同的清理模式

    清理緩存的模式        Session的查詢方法                Session的commit()方法       Session的flush()方法
    FlushMode.AUTO           清理                               清理                     清理  
    FlushMode.COMMIT         不清理                             清理                     清理  
    FlushMode.NEVER          不清理                             不清理                   清理

    3 Hibernate應用中java對象的狀態
    臨時狀態 (transient):剛剛用new語句創建,還沒被持久化,不處與Session的緩存中,處于臨時狀態的java對象被稱為臨時對象.
    持久化狀態(persistent):已經被持久化,加入session的緩存中.處于持久化狀態的java對象被稱為持久化對象.
    游離狀態(detached):已經被持久化,但不在處于session的緩存中.處于游離狀態的java對象被稱為游離對象.
    (注意:::::)持久化類與持久化對象是不同的概念.持久化類的實例可以處于臨時狀態,持久化狀態和游離狀態.其中處于
               持久化狀態的實例 被稱為持久化狀態.

    臨時對象的特性:
    1 不處于緩存中,也可以說,不被任何一個Session實例關聯
    2 在數據中沒有對應的紀錄.
    在此情況下,java對象進入臨時狀態
    1 當通過new創建一個對象時,此時不和數據庫中的任何紀錄的
    ex:
                                            對象的狀態轉化過程

           程序代碼                                        對象的生命周期                     對象的狀態
    tx=session.beginTransaction();
    Object obj=new Object("tow",new HashSet());               開始生命周期                臨時狀態
     
    session.save(obj);                                        處于生命周期              轉化為持久狀態

    Long id=obj.getId();
    obj=null;
    Object obj2=(Object)session.load(Object.class,id);        處于生命周期             處于持久化狀態
    tx.commit();                                                         

    session.close();                                          處于生命周期              轉變成游離狀態

    System.out.print(obj2.getName());                         處于生命周期               處于游離狀態

    obj2=null;                                                結束生命周期               結束生命周期

     


     4                                     cascade屬性
        cascade屬性值                                             描述
         none                                    在保存更新時,忽略其他關聯對象,他是cascade默認屬性
         save-update                             當通過Session的save(),update()以及saveOrUpdate()方法來保存
                                                 或更新當前對象時,及聯保存所有關聯的新建的臨時對象,并且及聯更新所有關聯的游離對象
         delete                                  當通過session的delete()方法刪除當前對象時,及聯刪除所有對象
         all                                     包含save-update及delete行為,此外對當前對象執行evict()或lock
                                                 ()操作時,也會對所有關聯的持久化對象執行evict()或lock()操作
         delete-orphan                           刪除所有和當前對象解除關聯關系的對象
         all-delete-orphan                       包含all和delete-orphan

     

     5             Hibernate映射類型,對應的java基本類型及對應的標準SQL類型
          Hibernate 映射類型               java類型                     標準SQL類型
           integer或者int                  int                          INTEGER
           long                            long                         BIGINT
           short                           short                        SMALLINT
           byte                            byte                         TINYINT
           float                           float                        FLOAT
           double                          double                       DOUBLE
           big_decimal                     java.math.BigDecimal         NUMERIC
           character                       char and string              CHAR
           string                          string                       VARCHAR
           boolean                         boolean                      BIT
        
                  Hibernate映射類型,對應的java時間和日期類型及對應的標準SQL類型
         映射類型           java類型                     標準SQL類型             描述
          date       java.util.Date或者java.sql.Date        DATE         代表日期,YYYY-MM-DD
          time       java.util.Date或者java.sql.Date        TIME         代表時間,形式為HH:MM:SS
          timestamp  java.util.Date或者java.sql.Timestamp   TIMESTAMP    代表日期和時間,YYYYMMDDHHMMSS
          calendar   java.util.Calendar                     TIMESTAMP    同上
       calendar_date java.util.Calendar                     DATE         代表日期,YYYY-MM-DD


     6                           JAVA大對象類型的Hibernate映射類型
       映射類型             java類型                 標準SQL類型           MYSQL類型           ORALCE類型
       binary                byte[]                 VARBINARY(或BLOB)      BLOB                  BLOB
       text                  string                 CLOB                   TEXT                  CLOB
       serializable          實現Serializable       VARBINARY(或BLOB)      BLOB                  BLOB
                             接口任意一個java類
       clob                  java.sql.Clob          CLOB                   TEXT                  CLOB           
       blob                  java.sql.Blob          BLOB                   BLOB                  BLOB
       例:
    a  Session session=sessionFactory.openSession();
       Transaction tx=session.beginTransaction();
       Object obj=new Object();
       obj.setFile(Hibernate.createClob(" "));
       session.save(obj);
       session.flush();
       //鎖定這條紀錄
       session.refresh(obj,LocakMode.UPGRADE);
       oracle.sql.CLOB clob=(oracle.sql.CLOB)obj.getFile();
       //把長文本數據放入Clob中
       Writer pw=clob.getCharacterOutputStream();
       pw.write(longText);//longText標識長度超過255的字符串
       pw.close();
       tx.commit();
       session.close();

    b  InputStream in=this.getClass().getResourceAsStream("photo.gif");
       byte[] buffer=new byte[in.available()];
       in.read(buffer);
       set

     

     7                     映射文件中用于設定檢索策略的幾個屬性

        屬性           可選值            默認值                                描述
        lazy          true,false         false               如為true,表延遲索引,在<class><set>中包含此屬性
      outer-join     auto,true,false     在<many-to-one>     如為true,表迫切左外連接檢索策略,在<many-to-one>
                                           <one-to-one>      <one-to-one>和<set>元素中包含此屬性
                                         元素為auto,在<set>
                                         元素中為false
      batch-size     正整數               1                 設定批量檢索的數量,合理取值在3-10間.
                                                            僅適用于關聯級別的立即檢索和延遲檢索,在<class><set>元素中包含此屬性
      caonstrained                          true            <one-to-one>中的元素,與<many-to-one>的not null
                                                            在語義上有些相似,它表明對象之間必須關聯.

     

     8                                 HQL和QBC支持的各種運算

    運算比較         HQL運算符                       QBC運算方法                        含義
                      =                             Expression.eq()                    等于
                      <>                            Expression.not(Expression.eq())    不等于
                      >                             Expression.gt()                     大于
                      >=                            Expression.ge()                    大于等于
     比較運算         <                             Expression.lt()                     小于
                      <=                            Expression.le()                     小于等于
                      is null                       Expression.isNull()                 等于空值
                      is not null                   Expression.isNotNull()              非空值

     范圍運算         in(列表)                      Expression.in()                   等于列表中的某一值
                      not in(列表)                  Expression.not(Expression.in())  不等于列表中的任意一值
                      between 值1 and 值2           Expression.between()           大于等于1并小于等于2
                      not between 值1 and 值2       Expression.not(Expression.between) 小于值1或者大于值2

     字符串模式匹配   like                          Expression.like()                  字符串模式匹配
     邏輯運算         and                           Expression.and()
                                                    Expression.conjunction()           邏輯與
                      or                            Expression.or()
                                                    Expression.disjunction()           邏輯或
                      not                           Expression.not()                   邏輯非
    引申:Expression.eq("name","tom").ignoreCase();不區分大小寫

     

      9                       expression.MatchMode類包含的各個靜態常量實例
             匹配模式                                               舉例
        MatchMode.START                Expression.like("NAME","T",MatchMode.StART)姓名以T開頭
        MatchMode.END                  Expression.like("NAME","T",MatchMode.END)姓名以T結尾
        MatchMode.ANYWHERE             Expression.like("NAME","T",MatchMode.ANYWHERE)姓名包含T
        MatchMode.EXACT                Expression.like("NAME","Tom",MatchMode.SEXACT)姓名必須是Tom


     10 ex:
           Iterator it=session.createQuery("select c.name,count(c) from object").list.iterator();
           while(it.hasNext()){
             Object[] pair=(Object[])it.next();
             String name=(String)pair[0];
             Integer count=(Integer)pair[1];
           }

     11 集合過濾
       Session的createFilter()方法用來過濾集合,它具有以下特點.
       a 它返回Query類型的實例
       b 它所處的對象必須處于持久化狀態
       c 它的第二個參數指定過濾條件,它由合法的HQL語句組成
       d 不管持久化對象的集合是否已經被初始化,Query的list方法都會執行SQL查詢語句,到數據庫中檢索關聯對象
       e 如對象中的集合已被初始化,為保證Session中緩存不出現id相同的集合對象,Query的list不會在創建集合對象
         僅僅返回已經存在的集合對象的引用
       f 如對象中的集合對象未被初始化,Query的list()方法會創建相應的(集合名)對象,但不是初始化對象的對象集合
     

     12 子查詢的應用
       all 表示子查詢語句返回的所有紀錄
       ex:返回所有訂單價格都小于100的客戶
       from Customer c where 100>all(select o.price from c.orders o)
       any 表示子查詢語句返回的任意一條紀錄
       ex:返回一條訂單價格小于100的客戶
       from Customer c where 100>any(select o.price from c.orders o)
       some 與any等價
       in 與=any等價
       ex:返回一條訂單價格等于100的客戶
       from Customer c where 100=any(select o.price from c.orders o)
       from Customer c where 100=some(select o.price from c.orders o)
       from Customer c where 100 in (select o.price from c.orders o)
       exists 表示自查詢語句至少返回一條紀錄
       ex:返回至少有一條的訂單客戶
       from Customer c where exists (select c.orders)
      
       如果子查詢語句是一個集合,可采用
       from  Customer c where :order in elements(c.orders)====(from c.orders)

    13 HQL操縱集合的函數或屬性
       size()函數或size屬性:獲得集合元素的數目
       minIndex()函數或minIndex屬性:對于建立了索引的集合,獲得最小索引
       maxIndex()函數或maxIndex屬性:對于建立了索引的集合,獲得最大索引
       minElement()函數或minElement屬性:對于包含基本類型元素的集合,獲得集合中取值最小的元素
       maxElement()函數或maxElement屬性:對于包含基本類型元素的集合,獲得集合中取值最大的元素
       elements()函數:獲得集合中的所有元素
       ex:from Customer c where c.orders.size>0  or from Customer c where size(c.orders)>0


    14 在映射文件中配置SQL語句
    <sql-query name="findCustomerAndOrders"><![CDATA[
      select {c.*},{o.*} from CUSTOMERS c inner join ORDERS o where C.ID=o.CUSTOMER_ID]]>
      <return alias="c" class="Customer"/>
      <return alias="o" class="Order"/>
    </sql>


                                      比較HQL與QBC的優缺點
       比較方面                            HQL檢索方式                          QBC檢索方式
       可讀性                 優點:和SQL查詢語句較接近,易讀             肢解成Criterion實例,可讀性差
       功能                   優點:功能最強大,支持各類查詢             不支持報表查詢,子查詢,連接查詢也受限
       查詢語句形式           缺點:應用程序必須提供基于字符串的HQL語句  優點:提供了更加面向對象的接口
       何時被解析             缺點:HQL只有在運行時才被解析              優點:更易排錯
       可擴展性               缺點:不具有擴展性                         優點:允許用戶擴展Criterion接口
       對動態查詢語句的支持   缺點:支持動態語句但編成麻煩               優點:適合生成動態查詢


    15                                  Hibernate中的事務
       session.disconnect(); 釋放數據庫連接
       session.reconnect();  重新獲得數據庫連接
       對于同時運行的多個事務,當這些事務訪問數據庫中相同的數據時,如果沒有采取必要的隔離機制,就會導致各類問題并發.可歸納為以下幾類
       a 第一類丟失更新:撤銷一個事務時,把其他事務已提交的更新覆蓋.
       b 臟讀:一個事務讀到另一事務未提交的更新數據
       c 虛讀:一個事務讀到另一事務已提交的新插入的數據
       d 不可重復讀:一個事務讀到另一事務以提交的更新數據
       e 第二類丟失更新:這是不可重讀中的特例,一個事務覆蓋另一事務已提交的更新數據.

    posted on 2007-11-16 11:27 禮物 閱讀(6671) 評論(0)  編輯  收藏

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

    網站導航:
     
    主站蜘蛛池模板: 亚洲av无码专区在线播放| 亚洲精品午夜在线观看| 国产精品免费福利久久| 亚洲fuli在线观看| 国产一区二区三区免费在线观看| 好吊色永久免费视频大全| 亚洲国色天香视频| 亚洲国产成人久久精品99 | 亚洲人成伊人成综合网久久久| 免费无码又爽又刺激高潮视频| 最新亚洲春色Av无码专区| 国产亚洲精久久久久久无码77777 国产亚洲精品成人AA片新蒲金 | 久久久久久亚洲精品不卡| AV大片在线无码永久免费| 日亚毛片免费乱码不卡一区| 亚洲高清无在码在线电影不卡| 免费一级黄色毛片| 国产卡二卡三卡四卡免费网址| 国产精品免费久久久久电影网| 久久综合亚洲色HEZYO社区| 亚洲国产精品第一区二区三区| 国产精品入口麻豆免费观看| 一个人看的在线免费视频| 亚洲最大天堂无码精品区| 亚洲动漫精品无码av天堂| 国产免费人成视频在线观看| 亚洲一区二区三区免费视频| 免费在线黄色电影| 美女免费精品高清毛片在线视| 亚洲av无码一区二区三区观看| 亚洲国产成人片在线观看无码| 亚洲欧洲久久av| 国产精品视频免费一区二区三区| 久久精品毛片免费观看| 中文字幕在线免费视频| 国产成人亚洲精品无码AV大片| 亚洲国产系列一区二区三区| 亚洲色av性色在线观无码| 亚洲VA中文字幕不卡无码| 久久影视国产亚洲| 免费不卡中文字幕在线|