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

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

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

    posts - 55,comments - 89,trackbacks - 0
    oracle 10g默認(rèn)需要微軟的網(wǎng)絡(luò)適配器配置。新建一個就行了。
    方法,打開控制面板,選者添加硬件—選擇是,我已經(jīng)連接了此硬件,下一步選者最后一項(xiàng)添加新的硬件設(shè)備,下一步選擇 安裝我手動從列表選者的硬件(高級),下一步選者網(wǎng)絡(luò)適配器,下一步選者M(jìn)icrosoft Loopback
    Adapter,按向?qū)崾鞠乱徊骄托辛恕M瓿梢院蟠蜷_你的網(wǎng)上鄰居看看是不是多了一個網(wǎng)上連接(2),然后設(shè)置它的IP地址如。192.168.1.1.隨便就行了,這樣在安裝oracle的時候就可以用這一個假的網(wǎng)絡(luò)來連接,蒙騙一下 oracle了。一定可以驗(yàn)證過去
    posted @ 2012-08-18 13:38 jiafang83 閱讀(915) | 評論 (0)編輯 收藏
        摘自:http://article.pchome.net/content-330924.html

           在過去幾年里,Hibernate不斷發(fā)展,幾乎成為Java數(shù)據(jù)庫持久性的事實(shí)標(biāo)準(zhǔn)。它非常強(qiáng)大、靈活,而且具備了優(yōu)異的性能。在本文中,我們將了解如何使用Java 5 注釋來簡化Hibernate代碼,并使持久層的編碼過程變得更為輕松。

      傳統(tǒng)上,Hibernate的配置依賴于外部 XML 文件:數(shù)據(jù)庫映射被定義為一組 XML 映射文件,并且在啟動時進(jìn)行加載。創(chuàng)建這些映射有很多方法,可以從已有數(shù)據(jù)庫模式或Java類模型中自動創(chuàng)建,也可以手工創(chuàng)建。無論如何,您最終將獲得大量的 Hibernate 映射文件。此外,還可以使用工具,通過javadoc樣式的注釋生成映射文件,盡管這樣會給您的構(gòu)建過程增加一個步驟。

      在最近發(fā)布的幾個Hibernate版本中,出現(xiàn)了一種基于 Java 5 注釋的更為巧妙的新方法。借助新的 Hibernate Annotation 庫,即可一次性地分配所有舊映射文件——一切都會按照您的想法來定義——注釋直接嵌入到您的 Java 類中,并提供一種強(qiáng)大及靈活的方法來聲明持久性映射。籍由自動代碼完成和語法突出顯示功能,最近發(fā)布的Java IDE也為其提供了有力的支持。

      Hibernate Annotation還支持新的 EJB 3 持久性規(guī)范。這些規(guī)范旨在提供一種標(biāo)準(zhǔn)化的 Java 持久性機(jī)制。由于 Hibernate 3 還提供了一些擴(kuò)展,因此您可以十分輕松地遵從這些標(biāo)準(zhǔn),并使用 EJB 3 編程模型來對 Hibernate 持久層進(jìn)行編碼。

      現(xiàn)在,讓我們來動手使用Hibernate Annotation。

    安裝 Hibernate Annotation

      要使用 Hibernate Annotation,您至少需要具備 Hibernate 3.2和Java 5。可以從 Hibernate 站點(diǎn) 下載 Hibernate 3.2 和 Hibernate Annotation庫。除了標(biāo)準(zhǔn)的 Hibernate JAR 和依賴項(xiàng)之外,您還需要 Hibernate Annotations .jar 文件(hibernate-annotations.jar)、Java 持久性 API (lib/ejb3-persistence.jar)。如果您正在使用 Maven,只需要向 POM 文件添加相應(yīng)的依賴項(xiàng)即可,如下所示:

     ...
    
    org.hibernate
    hibernate
    3.2.1.ga
    
    
    org.hibernate
    hibernate-annotations
    3.2.0.ga
    
    
    javax.persistence
    persistence-api
    1.0
    
    ...
    

      下一步就是獲取 Hibernate 會話工廠。盡管無需驚天的修改,但這一工作與使用 Hibernate Annotations有所不同。您需要使用 AnnotationConfiguration 類來建立會話工廠:

    sessionFactory = new
    AnnotationConfiguration().buildSessionFactory();

      盡管通常使用 元素來聲明持久性類,您還是需要在 Hibernate 配置文件(通常是 hibernate.cfg.xml)中聲明持久性類:

    
    
    
    
    
    
    

      近期的許多 Java 項(xiàng)目都使用了輕量級的應(yīng)用框架,例如 Spring。如果您正在使用 Spring 框架,可以使用 AnnotationSessionFactoryBean 類輕松建立一個基于注釋的 Hibernate 會話工廠,如下所示:

    
    
    
    
    
    
    
    org.hibernate.dialect.DerbyDialect
    create
    ...
    
    
    
    
    com.onjava.modelplanes.domain.PlaneType
    com.onjava.modelplanes.domain.ModelPlane
    ...
    
    
    
    

    第一個持久性類

      既然已經(jīng)知道了如何獲得注釋所支持的 Hibernate 會話,下面讓我們來了解一下帶注釋的持久性類的情況:

      像在其他任何 Hibernate應(yīng)用程序中一樣,帶注釋的持久性類也是普通 POJO。差不多可以說是。您需要向 Java 持久性 API (javax.persistence.*)添加依賴項(xiàng),如果您正在使用任何特定于 Hibernate的擴(kuò)展,那很可能就是 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 注釋可以表明哪種屬性是該類中的獨(dú)特標(biāo)識符。事實(shí)上,您既可以保持字段(注釋成員變量),也可以保持屬性(注釋getter方法)的持久性。后文中將使用基于屬性的注釋。基于注釋的持久性的優(yōu)點(diǎn)之一在于大量使用了默認(rèn)值(最大的優(yōu)點(diǎn)就是 “慣例優(yōu)先原則(convention over configuration)”)。例如,您無需說明每個屬性的持久性——任何屬性都被假定為持久的,除非您使用 @Transient 注釋來說明其他情況。這簡化了代碼,相對使用老的 XML 映射文件而言也大幅地減少了輸入工作量。

    生成主鍵

      Hibernate 能夠出色地自動生成主鍵。Hibernate/EBJ 3 注釋也可以為主鍵的自動生成提供豐富的支持,允許實(shí)現(xiàn)各種策略。下面的示例說明了一種常用的方法,其中 Hibernate 將會根據(jù)底層數(shù)據(jù)庫來確定一種恰當(dāng)?shù)逆I生成策略:

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public Long getId() {
    return id;
    }
    

    定制表和字段映射

      默認(rèn)情況下,Hibernate 會將持久類以匹配的名稱映射到表和字段中。例如,前一個類可以與映射到以如下代碼創(chuàng)建的表中:

    CREATE TABLE MODELPLANE
    (
    ID long,
    NAME varchar
    )
    

      如果您是自己生成并維護(hù)數(shù)據(jù)庫,那么這種方法很有效,通過省略代碼可以大大簡化代碼維護(hù)。然而,這并不能滿足所有人的需求。有些應(yīng)用程序需要訪問外部數(shù)據(jù)庫,而另一些可能需要遵從公司的數(shù)據(jù)庫命名慣例。如果有必要,您可以使用 @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;
    }
    }
    

      該內(nèi)容將映射到下表中:

    CREATE TABLE T_MODEL_PLANE
    (
    PLANE_ID long,
    PLANE_NAME varchar
    )
    

      也可以使用其他圖和列的屬性來定制映射。這使您可以指定諸如列長度、非空約束等詳細(xì)內(nèi)容。Hibernate支持大量針對這些注釋的屬性。下例中就包含了幾種屬性:

     ...
    @Column(name="PLANE_ID", length=80, nullable=true)
    public String getName() {
    return name;
    }
    ...
    

    映射關(guān)系

      Java 持久性映射過程中最重要和最復(fù)雜的一環(huán)就是確定如何映射表間的關(guān)系。像其他產(chǎn)品一樣, Hibernate 在該領(lǐng)域中提供了高度的靈活性,但卻是以復(fù)雜度的增加為代價。我們將通過研究幾個常見案例來了解如何使用注釋來處理這一問題。

      其中一種最常用的關(guān)系就是多對一的關(guān)系。假定在以上示例中每個 ModelPlane 通過多對一的關(guān)系(也就是說,每個飛機(jī)模型只與一種飛機(jī)類型建立聯(lián)系,盡管指定的飛機(jī)類型可以與七種飛機(jī)模型建立聯(lián)系)來與 PlaneType 建立聯(lián)系。可如下進(jìn)行映射:

     @ManyToOne( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
    public PlaneType getPlaneType() {
    return planeType;
    }
    

      CascadeType 值表明 Hibernate 應(yīng)如何處理級聯(lián)操作。

      另一種常用的關(guān)系與上述關(guān)系相反:一對多再對一關(guān)系,也稱為集合。在老式的 Hibernate 版本中進(jìn)行映射或使用注釋時,集合令人頭疼,這里我們將簡要加以探討,以使您了解如何處理集合,例如,在以上示例中每個 PlaneType 對象都可能會包含一個 ModelPlanes 集合。可映射如下:

     @OneToMany(mappedBy="planeType",
    cascade=CascadeType.ALL,
    fetch=FetchType.EAGER)
    @OrderBy("name")
    public List getModelPlanes() {
    return modelPlanes;
    }
    

    命名查詢

      Hibernate 最優(yōu)秀的功能之一就在于它能夠在您的映射文件中聲明命名查詢。隨后即可通過代碼中的名稱調(diào)用此類查詢,這使您可以專注于查詢,而避免了 SQL 或者 HQL 代碼分散于整個應(yīng)用程序中的情況。

      也可以使用注釋來實(shí)現(xiàn)命名查詢,可以使用 @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"
    )
    }
    )
    

      一旦完成了定義,您就可以像調(diào)用其他任何其他命名查詢一樣來調(diào)用它們。

    結(jié)束語

      Hibernate 3 注釋提供了強(qiáng)大而精致的 API,簡化了 Java 數(shù)據(jù)庫中的持久性代碼,本文中只進(jìn)行了簡單的討論。您可以選擇遵從標(biāo)準(zhǔn)并使用 Java 持久性 API,也可以利用特定于 Hibernate的擴(kuò)展,這些功能以損失可移植性為代價提供了更為強(qiáng)大的功能和更高的靈活性。無論如何,通過消除對 XML 映射文件的需求,Hibernate 注釋將簡化應(yīng)用程序的維護(hù),同時也可以使您對EJB 3 有初步認(rèn)識。來試試吧!

    posted @ 2009-07-26 14:00 jiafang83 閱讀(333) | 評論 (0)編輯 收藏
    摘自:http://www.javaeye.com/topic/95822

    school和userMember是一對多關(guān)系:

    SchoolInfo.java

     1import javax.persistence.CascadeType;   
     2import javax.persistence.Column;   
     3import javax.persistence.Entity;   
     4import javax.persistence.FetchType;   
     5import javax.persistence.GeneratedValue;   
     6import javax.persistence.Id;   
     7import javax.persistence.OneToMany;   
     8import javax.persistence.Table;   
     9import javax.persistence.Temporal;   
    10import javax.persistence.TemporalType;   
    11   
    12import org.hibernate.annotations.Formula;   
    13import org.hibernate.annotations.GenericGenerator;   
    14   
    15@Entity   
    16@Table(name = "school_info")   
    17public class SchoolInfo implements java.io.Serializable {   
    18   
    19    @Id   
    20    @GeneratedValue(generator = "system-uuid")   
    21    @GenericGenerator(name = "system-uuid", strategy = "uuid")   
    22    private String id;//hibernate的uuid機(jī)制,生成32為字符串   
    23   
    24    @Column(name = "actcodeId", updatable = false, nullable = true, length = 36)   
    25    private String actcodeId;   
    26   
    27    @Formula("select COUNT(*) from school_info")   
    28    private int count;   
    29   
    30    @Temporal(TemporalType.TIMESTAMP)//不用set,hibernate會自動把當(dāng)前時間寫入   
    31    @Column(updatable = false, length = 20)   
    32    private Date createTime;   
    33   
    34    @Temporal(TemporalType.TIMESTAMP)   
    35    private Date updateTime;// 剛開始我默認(rèn)insertable=false,但會讀取出錯提示如下:   
    36    // Value '0000-00-00' can not be represented as java.sql.Timestamp   
    37   
    38    // mappedBy="school"就相當(dāng)于inverse=true,(mappedBy指定的是不需要維護(hù)關(guān)系的一端)   
    39    // 應(yīng)該注意的是mappedBy值對應(yīng)@ManyToOne標(biāo)注的屬性,我剛開始寫成"schoolId",讓我郁悶了好一會 
    40    @OneToMany(mappedBy = "school", cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = UserMember.class)   
    41    // 用范性的話,就不用targetEntity了   
    42    private List<usermember> users = </usermember>new ArrayList<usermember>();  </usermember> 
    43       
    44}
       
    45

    @GeneratedValue(strategy=GenerationType.AUTO)我們常用的自增長機(jī)制,我這里采用的是hibernate的uuid生成機(jī)制.
    需要注意的是import javax.xx.Entity ,而不是org.hibernate.xx.Entity。

    郁悶的是我上面用到@Formula,生成的sql竟然是'select COUNT(*) from school_info as formula0_ from school_info schoolinfo0_,當(dāng)然不能執(zhí)行了,尋求正解中~!!!!!!!!!

    UserMember.java(前面引入的包已經(jīng)貼過了,下面就不貼了)
     1 @Entity   
     2 @Table(name = "teacher_info")//實(shí)體類和數(shù)據(jù)庫表名不一致時,才用這個   
     3 public class UserMember implements java.io.Serializable {   
     4    
     5     @Id   
     6     @GeneratedValue(generator = "system-uuid")   
     7     @GenericGenerator(name = "system-uuid", strategy = "uuid")   
     8     private String id;   
     9    
    10     @Column(updatable = false, nullable = false, length = 20)   
    11     private String logonName;   
    12        
    13     @Temporal(TemporalType.TIMESTAMP)   
    14     @Column(updatable = false, length = 20)   
    15     private Date createTime;   
    16    
    17     @Temporal(TemporalType.TIMESTAMP)   
    18     private Date updateTime;   
    19    
    20     @ManyToOne(cascade = { CascadeType.MERGE })   
    21     @JoinColumn(name = "schoolId")   
    22     private SchoolInfo school;   
    23     //注意該類就不用聲明schoolId屬性了,如果不用@JoinColumn指明關(guān)聯(lián)的字段,hibernate默認(rèn)會是school_id.   
    24    
    25 }   

    posted @ 2009-07-26 13:40 jiafang83 閱讀(3185) | 評論 (1)編輯 收藏
    posted @ 2009-07-20 22:31 jiafang83 閱讀(257) | 評論 (0)編輯 收藏
    轉(zhuǎn)載:http://www.cnblogs.com/Truly/archive/2006/12/31/608896.html

    JSON定義

        JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式,易于閱讀和編寫,同時也易于機(jī)器解析和生成。它基于ECMA262語言規(guī)范(1999-12第三版)中JavaScript編程語言的一個子集。 JSON采用與編程語言無關(guān)的文本格式,但是也使用了類C語言(包括C, C++, C#, Java, JavaScript, Perl, Python等)的習(xí)慣,這些特性使JSON成為理想的數(shù)據(jù)交換格式。

    JSON的結(jié)構(gòu)基于下面兩點(diǎn)

    • 1. "名稱/值"對的集合 不同語言中,它被理解為對象(object),記錄(record),結(jié)構(gòu)(struct),字典(dictionary),哈希表(hash table),鍵列表(keyed list)等
    • 2. 值的有序列表 多數(shù)語言中被理解為數(shù)組(array)
    JSON使用

    JSON以一種特定的字符串形式來表示 JavaScript 對象。如果將具有這樣一種形式的字符串賦給任意一個 JavaScript 變量,那么該變量會變成一個對象引用,而這個對象就是字符串所構(gòu)建出來的,好像有點(diǎn)拗口,我們還是用實(shí)例來說明。

     這里假設(shè)我們需要創(chuàng)建一個User對象,并具有以下屬性

  • 用戶ID
  • 用戶名
  • 用戶Email

    您可以使用以下JSON形式來表示User對象:

    {"UserID":11, "Name":"Truly", "Email":"zhuleipro◎hotmail.com"};

    然后如果把這一字符串賦予一個JavaScript變量,那么就可以直接使用對象的任一屬性了。

    完整代碼:

    <script>
    var User = {"UserID":11, "Name":"Truly", "Email":"zhuleipro◎hotmail.com"}; alert(User.Name); </script>

    實(shí)際使用時可能更復(fù)雜一點(diǎn),比如我們?yōu)镹ame定義更詳細(xì)的結(jié)構(gòu),使它具有FirstName和LastName:

    {"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"}

    完整代碼:

    <script>
    var User = {"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"}; alert(User.Name.FirstName); </script>

    現(xiàn)在我們增加一個新的需求,我們某個頁面需要一個用戶列表,而不僅僅是一個單一的用戶信息,那么這里就需要創(chuàng)建一個用戶列表數(shù)組。
    下面代碼演示了使用JSON形式定義這個用戶列表:

    [
    {"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"},
    {"UserID":12, "Name":{"FirstName":"Jeffrey","LastName":"Richter"}, "Email":"xxx◎xxx.com"},
    {"UserID":13, "Name":{"FirstName":"Scott","LastName":"Gu"}, "Email":"xxx2◎xxx2.com"}
    ]


    完整代碼:

    <script>
    var UserList = [
    {"UserID":11, "Name":{"FirstName":"Truly","LastName":"Zhu"}, "Email":"zhuleipro◎hotmail.com"},
    {"UserID":12, "Name":{"FirstName":"Jeffrey","LastName":"Richter"}, "Email":"xxx◎xxx.com"},
    {"UserID":13, "Name":{"FirstName":"Scott","LastName":"Gu"}, "Email":"xxx2◎xxx2.com"}
    ];
    alert(UserList[0].Name.FirstName);
    </script>

    事實(shí)上除了使用"."引用屬性外,我們還可以使用下面語句:

    alert(UserList[0]["Name"]["FirstName"]); 或者 alert(UserList[0].Name["FirstName"]); 

    現(xiàn)在讀者應(yīng)該對JSON的使用有點(diǎn)認(rèn)識了,歸納為以下幾點(diǎn):

  • 對象是屬性、值對的集合。一個對象的開始于“{”,結(jié)束于“}”。每一個屬性名和值間用“:”提示,屬性間用“,”分隔。
  • 數(shù)組是有順序的值的集合。一個數(shù)組開始于"[",結(jié)束于"]",值之間用","分隔。
  • 值可以是引號里的字符串、數(shù)字、true、false、null,也可以是對象或數(shù)組。這些結(jié)構(gòu)都能嵌套。
  • 字符串和數(shù)字的定義和C或Java基本一致。

    小節(jié)

    本文通過一個實(shí)例演示,初步了解了JSON 的強(qiáng)大用途。可以歸結(jié)如下:

  • JSON 提供了一種優(yōu)秀的面向?qū)ο蟮姆椒ǎ员銓⒃獢?shù)據(jù)緩存到客戶機(jī)上。
  • JSON 幫助分離了驗(yàn)證數(shù)據(jù)和邏輯。
  • JSON 幫助為 Web 應(yīng)用程序提供了 Ajax 的本質(zhì)。
  • posted @ 2009-06-16 01:03 jiafang83 閱讀(330) | 評論 (0)編輯 收藏
    主站蜘蛛池模板: 亚洲午夜无码久久久久| 亚洲熟女一区二区三区| 亚洲中文字幕久久无码| 最近中文字幕大全免费视频 | 在线毛片片免费观看| 国产成人免费高清激情明星| 暖暖免费高清日本一区二区三区| 亚洲日本中文字幕天堂网| 亚洲国色天香视频| a级片免费在线观看| 亚洲国产综合久久天堂| 亚洲日韩精品无码专区| 久久久久久免费视频| 亚洲av成人无码久久精品| 国产大陆亚洲精品国产| 222www在线观看免费| 精品亚洲AV无码一区二区| 免费观看男人吊女人视频| 亚洲精品国偷自产在线| 国产亚洲日韩在线a不卡| 久久亚洲国产伦理| a级亚洲片精品久久久久久久| 国产精品亚洲专区无码唯爱网| 在线观看特色大片免费视频 | 色吊丝免费观看网站| 成熟女人牲交片免费观看视频| 亚洲欧洲日产韩国在线| 日本亚洲国产一区二区三区| 免费观看黄网站在线播放| 亚洲乱亚洲乱妇无码| 亚洲人成电影在线观看青青| 动漫黄网站免费永久在线观看| 三级网站免费观看| 一区二区三区免费在线观看| 亚洲熟女乱综合一区二区| 国产精品无码素人福利免费| yellow视频免费看| 九九九精品视频免费| 免费人妻精品一区二区三区| 亚洲A∨无码一区二区三区| 久久乐国产精品亚洲综合|