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

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

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

    隨筆 - 1  文章 - 3  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567


    常用鏈接

    留言簿(1)

    隨筆檔案

    文章分類

    文章檔案

    相冊

    搜索

    •  

    最新評論

    • 1.?re: EXT亂碼
    • @lyq
      我們用的是UTF-8
    • --gkc
    • 2.?re: EXT亂碼
    • 你們工程里面用的編碼格式是utf-8嗎?如果不是的話,怎么只要把method=“post”就行了呢?

      那如果編碼格式是 gbk/gb2312,中文亂碼的問題怎么處理的呢?
    • --lyq
    • 3.?re: EXT出錯:undefined
    • 謝了,哥們.我也折騰了N久,最后被你的帖啟發了!
    • --小波
    在過去幾年里,Hibernate不斷發展,幾乎成為Java數據庫持久性的事實標準。它非常強大、靈活,而且具備了優異的性能。在本文中,我們將了解如何使用Java 5 注釋來簡化Hibernate代碼,并使持久層的編碼過程變得更為輕松。
      傳統上,Hibernate的配置依賴于外部 XML 文件:數據庫映射被定義為一組 XML 映射文件,并且在啟動時進行加載。創建這些映射有很多方法,可以從已有數據庫模式或Java類模型中自動創建,也可以手工創建。無論如何,您最終將獲得大量的 Hibernate 映射文件。此外,還可以使用工具,通過javadoc樣式的注釋生成映射文件,盡管這樣會給您的構建過程增加一個步驟。
      在最近發布的幾個Hibernate版本中,出現了一種基于 Java 5 注釋的更為巧妙的新方法。借助新的 Hibernate Annotation 庫,即可一次性地分配所有舊映射文件——一切都會按照您的想法來定義——注釋直接嵌入到您的 Java 類中,并提供一種強大及靈活的方法來聲明持久性映射。籍由自動代碼完成和語法突出顯示功能,最近發布的Java IDE也為其提供了有力的支持。
      Hibernate Annotation還支持新的 EJB 3 持久性規范。這些規范旨在提供一種標準化的 Java 持久性機制。由于 Hibernate 3 還提供了一些擴展,因此您可以十分輕松地遵從這些標準,并使用 EJB 3 編程模型來對 Hibernate 持久層進行編碼。
      現在,讓我們來動手使用Hibernate Annotation。
    安裝 Hibernate Annotation
      要使用 Hibernate Annotation,您至少需要具備 Hibernate 3.2和Java 5。可以從 Hibernate 站點 下載 Hibernate 3.2 和 Hibernate Annotation庫。除了標準的 Hibernate JAR 和依賴項之外,您還需要 Hibernate Annotations .jar 文件(hibernate-annotations.jar)、Java 持久性 API (lib/ejb3-persistence.jar)。如果您正在使用 Maven,只需要向 POM 文件添加相應的依賴項即可,如下所示:
           ...
           <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate</artifactId>
             <version>3.2.1.ga</version>
           </dependency>
           <dependency>
             <groupId>org.hibernate</groupId>
             <artifactId>hibernate-annotations</artifactId>
             <version>3.2.0.ga</version>
           </dependency>
           <dependency>
             <groupId>javax.persistence</groupId>
             <artifactId>persistence-api</artifactId>
             <version>1.0</version>
           </dependency>
           ...
      下一步就是獲取 Hibernate 會話工廠。盡管無需驚天的修改,但這一工作與使用 Hibernate Annotations有所不同。您需要使用 AnnotationConfiguration 類來建立會話工廠:
    sessionFactory = newAnnotationConfiguration().buildSessionFactory();
      盡管通常使用 <mapping> 元素來聲明持久性類,您還是需要在 Hibernate 配置文件(通常是 hibernate.cfg.xml)中聲明持久性類:
    <!DOCTYPE hibernate-configuration PUBLIC
           "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
           "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
               <hibernate-configuration>
                 <session-factory>
                   <mapping class="com.onjava.modelplanes.domain.PlaneType"/>
                   <mapping class="com.onjava.modelplanes.domain.ModelPlane"/>
                 </session-factory>
               </hibernate-configuration>
      近期的許多 Java 項目都使用了輕量級的應用框架,例如 Spring。如果您正在使用 Spring 框架,可以使用 AnnotationSessionFactoryBean 類輕松建立一個基于注釋的 Hibernate 會話工廠,如下所示:
    <!-- Hibernate session factory -->
         <bean id="sessionFactory"
               class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
          <property name="dataSource">
            <ref bean="dataSource"/>
          </property>
          <property name="hibernateProperties">
            <props>
              <prop key="hibernate.dialect">org.hibernate.dialect.DerbyDialect</prop>
              <prop key="hibernate.hbm2ddl.auto">create</prop>
              ...
            </props>
          </property>
          <property name="annotatedClasses">
            <list>
              <value>com.onjava.modelplanes.domain.PlaneType</value>
              <value>com.onjava.modelplanes.domain.ModelPlane</value>
              ...
            </list>
          </property>
    </bean>
    第一個持久性類
      既然已經知道了如何獲得注釋所支持的 Hibernate 會話,下面讓我們來了解一下帶注釋的持久性類的情況:
      像在其他任何 Hibernate應用程序中一樣,帶注釋的持久性類也是普通 POJO。差不多可以說是。您需要向 Java 持久性 API (javax.persistence.*)添加依賴項,如果您正在使用任何特定于 Hibernate的擴展,那很可能就是 Hibernate Annotation 程序包(org.hibernate.annotations.*),但除此之外,它們只是具備了持久性注釋的普通 POJO 。下面是一個簡單的例子:
    @Entity
    public class ModelPlane {
           private Long id;
           private String name;
           @Id
           public Long getId() {
               return id;
           }
           public void setId(Long id) {
               this.id = id;
           }
           public String getName() {
               return name;
           }
           public void setName(String name) {
               this.name = name;
           }
    }
      正像我們所提到的,這非常簡單。@Entity 注釋聲明該類為持久類。@Id 注釋可以表明哪種屬性是該類中的獨特標識符。事實上,您既可以保持字段(注釋成員變量),也可以保持屬性(注釋getter方法)的持久性。后文中將使用基于屬性的注釋。基于注釋的持久性的優點之一在于大量使用了默認值(最大的優點就是 “慣例優先原則(convention over configuration)”)。例如,您無需說明每個屬性的持久性——任何屬性都被假定為持久的,除非您使用 @Transient 注釋來說明其他情況。這簡化了代碼,相對使用老的 XML 映射文件而言也大幅地減少了輸入工作量。

    生成主鍵
      Hibernate 能夠出色地自動生成主鍵。Hibernate/EBJ 3 注釋也可以為主鍵的自動生成提供豐富的支持,允許實現各種策略。下面的示例說明了一種常用的方法,其中 Hibernate 將會根據底層數據庫來確定一種恰當的鍵生成策略:
    @Id
           @GeneratedValue(strategy=GenerationType.AUTO)
           public Long getId() {
               return id;
           }
    定制表和字段映射
      默認情況下,Hibernate 會將持久類以匹配的名稱映射到表和字段中。例如,前一個類可以與映射到以如下代碼創建的表中:

    CREATE TABLE MODELPLANE
    (
           ID long,
           NAME varchar
    )
      如果您是自己生成并維護數據庫,那么這種方法很有效,通過省略代碼可以大大簡化代碼維護。然而,這并不能滿足所有人的需求。有些應用程序需要訪問外部數據庫,而另一些可能需要遵從公司的數據庫命名慣例。如果有必要,您可以使用 @Table 和 @Column 注釋來定制您自己的持久性映射,如下所示:
    @Entity
    @Table(name="T_MODEL_PLANE")
    public class ModelPlane {
           private Long id;
           private String name;
           @Id
           @Column(name="PLANE_ID")
           public Long getId() {
               return id;
           }
           public void setId(Long id) {
               this.id = id;
           }
           @Column(name="PLANE_NAME")
           public String getName() {
               return name;
           }
           public void setName(String name) {
               this.name = name;
           }
    }
      該內容將映射到下表中:
    CREATE TABLE T_MODEL_PLANE
    (
           PLANE_ID long,
           PLANE_NAME varchar
    )
      也可以使用其他圖和列的屬性來定制映射。這使您可以指定諸如列長度、非空約束等詳細內容。Hibernate支持大量針對這些注釋的屬性。下例中就包含了幾種屬性:
           ...
           @Column(name="PLANE_ID", length=80, nullable=true)
           public String getName() {
               return name;
           }
           ...
    映射關系
      Java 持久性映射過程中最重要和最復雜的一環就是確定如何映射表間的關系。像其他產品一樣, Hibernate 在該領域中提供了高度的靈活性,但卻是以復雜度的增加為代價。我們將通過研究幾個常見案例來了解如何使用注釋來處理這一問題。
      其中一種最常用的關系就是多對一的關系。假定在以上示例中每個 ModelPlane 通過多對一的關系(也就是說,每個飛機模型只與一種飛機類型建立聯系,盡管指定的飛機類型可以與七種飛機模型建立聯系)來與 PlaneType 建立聯系。可如下進行映射:
           @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
           public PlaneType getPlaneType() {
                           return planeType;
                 }
      CascadeType 值表明 Hibernate 應如何處理級聯操作。
      另一種常用的關系與上述關系相反:一對多再對一關系,也稱為集合。在老式的 Hibernate 版本中進行映射或使用注釋時,集合令人頭疼,這里我們將簡要加以探討,以使您了解如何處理集合,例如,在以上示例中每個 PlaneType 對象都可能會包含一個 ModelPlanes 集合。可映射如下:
    @OneToMany(mappedBy="planeType",
                          cascade=CascadeType.ALL,
                          fetch=FetchType.EAGER)
           @OrderBy("name")
           public List<ModelPlane> getModelPlanes() {
               return modelPlanes;
           }
    命名查詢
      Hibernate 最優秀的功能之一就在于它能夠在您的映射文件中聲明命名查詢。隨后即可通過代碼中的名稱調用此類查詢,這使您可以專注于查詢,而避免了 SQL 或者 HQL 代碼分散于整個應用程序中的情況。
      也可以使用注釋來實現命名查詢,可以使用 @NamedQueries 和 @NamedQuery 注釋,如下所示:
    @NamedQueries(
    {         
         @NamedQuery(
           name="planeType.findById",
           query="select p from PlaneType p left join fetch p.modelPlanes where id=:id"
         ),
         @NamedQuery(
           name="planeType.findAll",
           query="select p from PlaneType p"
         ),
         @NamedQuery(
                 name="planeType.delete",
                 query="delete from PlaneType where id=:id"
               )  
    }
    )
      一旦完成了定義,您就可以像調用其他任何其他命名查詢一樣來調用它們。
    結束語
      Hibernate 3 注釋提供了強大而精致的 API,簡化了 Java 數據庫中的持久性代碼,本文中只進行了簡單的討論。您可以選擇遵從標準并使用 Java 持久性 API,也可以利用特定于 Hibernate的擴展,這些功能以損失可移植性為代價提供了更為強大的功能和更高的靈活性。無論如何,通過消除對 XML 映射文件的需求,Hibernate 注釋將簡化應用程序的維護,同時也可以使您對EJB 3 有初步認識。來試試吧!

    posted on 2007-10-26 10:01 ...... 閱讀(120) 評論(0)  編輯  收藏 所屬分類: HIBERNATE

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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲AV无码无限在线观看不卡| 国产亚洲色婷婷久久99精品| 亚洲娇小性色xxxx| 嘿嘿嘿视频免费网站在线观看| 亚洲欧洲日产国码在线观看| 日本黄网站动漫视频免费| 亚洲va成无码人在线观看| 成年轻人网站色免费看| 亚洲av成人中文无码专区| 四虎免费久久影院| A毛片毛片看免费| 亚洲特级aaaaaa毛片| 亚色九九九全国免费视频| 学生妹亚洲一区二区| 波多野结衣一区二区免费视频| 特级毛片在线大全免费播放| 在线亚洲97se亚洲综合在线| 久久精品视频免费| 亚洲精品亚洲人成在线播放| 国产成人高清精品免费软件| 美女无遮挡拍拍拍免费视频| 内射干少妇亚洲69XXX| 大地资源在线观看免费高清| 边摸边吃奶边做爽免费视频99| 亚洲熟女一区二区三区| 99精品视频在线视频免费观看 | 国产亚洲精品a在线观看| 成全视频高清免费观看电视剧| 久久久久亚洲AV无码专区首JN| 无码国产精品一区二区免费I6| 老司机亚洲精品影院在线观看| 久久亚洲国产精品一区二区| 成视频年人黄网站免费视频| 免费国产污网站在线观看不要卡| 亚洲AV美女一区二区三区| 免费av欧美国产在钱| 国产在线观看xxxx免费| 亚洲制服丝袜第一页| 国产中文在线亚洲精品官网| 黄页网站在线观看免费高清| rh男男车车的车车免费网站|