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

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

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

    飛艷小屋

    程序--人生--哲學(xué)___________________歡迎艷兒的加入

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      52 Posts :: 175 Stories :: 107 Comments :: 0 Trackbacks
    Hibernate技術(shù)全面學(xué)習(xí)

    1. hibernate核心接口

    在項(xiàng)目種使用Hibernate框架,非常關(guān)鍵的一點(diǎn)就是要了解Hibernate的核心接口。Hibernate 接口位于業(yè)務(wù)層和持久化層。

    圖1 Hibernate核心接口的層次架構(gòu)關(guān)系

      Hibernate的核心接口一共有5個(gè),分別為:Session、 SessionFactory、Transaction、Query和Configuration。這5個(gè)核心接口在任何開(kāi)發(fā)中都會(huì)用到。通過(guò)這些接口,不僅可以對(duì)持久化對(duì)象進(jìn)行存取,還能夠進(jìn)行事務(wù)控制。下面對(duì)這五的核心接口分別加以介紹。

    • Session接口:Session接口負(fù)責(zé)執(zhí)行被持久化對(duì)象的CRUD操作(CRUD的任務(wù)是完成與數(shù)據(jù)庫(kù)的交流,包含了很多常見(jiàn)的SQL語(yǔ)句。)。但需要注意的是Session對(duì)象是非線程安全的。同時(shí),Hibernate的session不同于JSP應(yīng)用中的HttpSession。這里當(dāng)使用session這個(gè)術(shù)語(yǔ)時(shí),其實(shí)指的是 Hibernate中的session,而以后會(huì)將HttpSesion對(duì)象稱(chēng)為用戶(hù)session。
    • SessionFactory接口:SessionFactroy接口負(fù)責(zé)初始化Hibernate。它充當(dāng)數(shù)據(jù)存儲(chǔ)源的代理,并負(fù)責(zé)創(chuàng)建 Session對(duì)象。這里用到了工廠模式。需要注意的是SessionFactory并不是輕量級(jí)的,因?yàn)橐话闱闆r下,一個(gè)項(xiàng)目通常只需要一個(gè) SessionFactory就夠,當(dāng)需要操作多個(gè)數(shù)據(jù)庫(kù)時(shí),可以為每個(gè)數(shù)據(jù)庫(kù)指定一個(gè)SessionFactory。
    • Configuration接口:Configuration接口負(fù)責(zé)配置并啟動(dòng)Hibernate,創(chuàng)建SessionFactory對(duì)象。在 Hibernate的啟動(dòng)的過(guò)程中,Configuration類(lèi)的實(shí)例首先定位映射文檔位置、讀取配置,然后創(chuàng)建SessionFactory對(duì)象。
    • Transaction接口:Transaction接口負(fù)責(zé)事務(wù)相關(guān)的操作。它是可選的,可發(fā)人員也可以設(shè)計(jì)編寫(xiě)自己的底層事務(wù)處理代碼。
    • Query和Criteria接口:Query和Criteria接口負(fù)責(zé)執(zhí)行各種數(shù)據(jù)庫(kù)查詢(xún)。它可以使用HQL語(yǔ)言或SQL語(yǔ)句兩種表達(dá)方式。
    /**

    ?簡(jiǎn)單應(yīng)用

    ??????? SessionFactory sf = new Configuration().configure().buildSessionFactory();
    ??? ??? Session session = sf.openSession();
    ??? ??? Transaction tx = session.beginTransaction();
    ??? ??? User user = new User();
    ??? ??? ???
    ??? ??? user.setUsername("starxing");
    ??? ??? user.setEmail("star_xing@126.com");
    ??? ??? user.setPassword("starixng");
    ??? ??? session.save(user);
    ??? ??? tx.commit();
    ??? ??? session.close();
    **/

    2. Hibernate 的配置文件應(yīng)用。


    2.1? 配置文件中映射元素詳解

    對(duì)象關(guān)系的映射是用一個(gè)XML文檔來(lái)說(shuō)明的。映射文檔可以使用工具來(lái)生成,如XDocletMiddlegenAndroMDA等。下面從一個(gè)映射的例子開(kāi)始講解映射元素,映射文件的代碼如下。

    <?xml version="1.0"?>
    <!--

    所有的XML映射文件都需要定義如下所示的DOCTYPE
    Hibernate會(huì)先在它的類(lèi)路徑(classptah)中搜索DTD文件。
    -->
    <!DOCTYPE hibernate-mapping PUBLIC
    ????? "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    ????????? "http
    //hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    ?
    <!--
    hibernate-mapping
    有幾個(gè)可選的屬性:
    schema屬性指明了這個(gè)映射的表所在的schema名稱(chēng)。
    default-cascade屬性指定了默認(rèn)的級(jí)聯(lián)風(fēng)格可取值有 nonesaveupdate
    auto-import屬性默認(rèn)讓我們?cè)诓樵?xún)語(yǔ)言中可以使用非全限定名的類(lèi)名可取值有 truefalse
    package屬性指定一個(gè)包前綴。
    -->
    <hibernate-mapping ?schema="schemaName"? default-cascade="none"
    ??? auto-import="true" ??package="test">
    ??????? <!--
    class元素來(lái)定義一個(gè)持久化類(lèi) -->
    ??????? <class name="People" ?table="person">??????????????
    ??????????????? <!-- id元素定義了屬性到數(shù)據(jù)庫(kù)表主鍵字段的映射。-->
    ??????????????? <id name="id">
    ??????????????????????? <!--
    用來(lái)為該持久化類(lèi)的實(shí)例生成唯一的標(biāo)識(shí)-->
    ???? ???????????????????<generator class="native"/>
    ??????????????? </id>
    <!-- discriminator
    識(shí)別器是一種定義繼承關(guān)系的映射方法-->
    ??????????????? <discriminator column="subclass" type="character"/>
    ?????????????? <!-- property
    元素為類(lèi)聲明了一個(gè)持久化的,JavaBean風(fēng)格的屬性-->
    ?????????????? <property name="name" type="string">
    ?????????????? ?????? <column name="name" length="64" not-null="true" />
    ?????????????? </property>
    ?????????????? <property name="sex"
    ?????????????? not-null="true"
    ?????????????? update="false"/>
    ?????????????? <!--
    多對(duì)一映射關(guān)系-->
    ?????????????? <many-to-one name="friend"
    ?????????????? column="friend_id"
    ?????????????? update="false"/>
    ??????????????? <!--
    設(shè)置關(guān)聯(lián)關(guān)系-->
    ??????????????? <set name="friends"
    ??????????????????? inverse="true"
    ??????????????????? order-by="id">
    ?????? ?????????????????<key column="friend_id"/>
    ??????????????????????? <!—
    一對(duì)多映射-->
    ??????????????????????? <one-to-many class="Cat"/>
    ??????????????? </set>
    ??????? </class>
    </hibernate-mapping>

    2.2? 組件應(yīng)用的方法

    組件有兩種類(lèi)型,即組件(component)和動(dòng)態(tài)組件(dynamic-component)。在配置文件中,component元素為子對(duì)象的元素與父類(lèi)對(duì)應(yīng)表的字段建立起映射關(guān)系。然后組件可以聲明它們自己的屬性、組件或者集合。component元素的定義如下所示:

    <component
    ??????? name="propertyName"
    ??????? class="className"
    ??????? insert="true|false"
    ??????? upate="true|false"
    ??????? access="field|property|ClassName">
    ???? ???<property ...../>
    ??????? <many-to-one .... />
    ??????? ........
    </component>

    在這段代碼中,name是指屬性名,class是類(lèi)的名字,insert指的是被映射的字段是否出現(xiàn)在SQLINSERT語(yǔ)句中,upate指出被映射的字段是否出現(xiàn)在SQLUPDATE語(yǔ)句中,access指出訪問(wèn)屬性的策略。

    2.3? Hiebernate的基本配置

    Hibernate的數(shù)據(jù)庫(kù)連接信息是從配置文件中加載的。Hibernate的配置文件有兩種形式:一種是XML格式的文件,一種是properties屬性文件。properties形式的配置文件默認(rèn)文件名是hibernate.properties,一個(gè)properties形式的配置文件內(nèi)容如下所示:

    #指定數(shù)據(jù)庫(kù)使用的驅(qū)動(dòng)類(lèi)
    hibernate.connection.driver_class = com.mysql.jdbc.Driver r
    #
    指定數(shù)據(jù)庫(kù)連接串
    hibernate.connection.url = jdbc:mysql://localhost:3306/db
    #
    指定數(shù)據(jù)庫(kù)連接的用戶(hù)名
    hibernate.connection.username = user
    ?
    #指定數(shù)據(jù)庫(kù)連接的密碼
    hibernate.connection.password = password
    ?
    #指定數(shù)據(jù)庫(kù)使用的方言
    hibernate.dialect = net.sf.hibernate.dialect.MySQLDialect
    ?
    #指定是否打印SQL語(yǔ)句
    hibernate.show_sql=true

    在配置文件中包含了一系列屬性的配置,Hibernate將根據(jù)這些屬性來(lái)連接數(shù)據(jù)庫(kù)。

    XML格式的配置文件中,除了基本的Hibernate配置信息,還可以指定具體的持久化類(lèi)的映射文件,這可以避免將持久化類(lèi)的配置文件硬編碼在程序中。XML格式的配置文件的默認(rèn)文件名為hibernate.cfg.xml,一個(gè)XML配置文件的示例如下所示:

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
    ????????? "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    ????????? "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
    ???????? <session-factory>
    ?????????????????? <!--
    顯示執(zhí)行的SQL語(yǔ)句-->
    ?????????????????? <property name="show_sql">true</property>???????????????????????????????????
    ?????????????????? <!--
    連接字符串-->
    ?????????????????? <property name="connection.url">jdbc:mysql://localhost:3306/STU</property>?????????????????
    ?????????????????? <!--
    連接數(shù)據(jù)庫(kù)的用戶(hù)名-->
    ?????????????????? <property name="connection.username">root</property>?????????????????
    ?????????????????? <!--
    數(shù)據(jù)庫(kù)用戶(hù)密碼-->
    ?????????????????? <property name="connection.password">root</property>
    ?????????????????
    ?????????????????? <!--
    數(shù)據(jù)庫(kù)驅(qū)動(dòng)-->
    ?????????????????? <property name="connection.driver_class">com.mysql.jdbc.Driver</property>?????????????????
    ?????????????????? <!--
    選擇使用的方言-->
    ?????????????????? <property name="dialect">org.hibernate.dialect.MySQLDialect</property>?????????????????
    ?????????????????? <!--
    映射文件 -->
    ?????????????????? <mapping resource="com/stuman/domain/Admin.hbm.xml"/>????????????????
    ?????????????????? <!--
    映射文件-->
    ?????????????????? <mapping resource="com/stuman/domain/Student.hbm.xml" />
    ???????? </session-factory>
    </hibernate-configuration>

    properties形式的配置文件和XML格式的配置文件可以同時(shí)使用。當(dāng)同時(shí)使用兩種類(lèi)型的配置文件時(shí),XML配置文件中的設(shè)置會(huì)覆蓋properties配置文件的相同的屬性。

    2.4? 對(duì)象標(biāo)識(shí)符號(hào)

    在關(guān)系數(shù)據(jù)庫(kù)表中,主鍵(Primary Key)用來(lái)識(shí)別記錄,并保證每條記錄的唯一性。在Java語(yǔ)言中,通過(guò)比較兩個(gè)變量所引用對(duì)象的內(nèi)存地址是否相同,或者比較兩個(gè)變量引用的對(duì)象值是否相同來(lái)判斷兩對(duì)象是否相等。Hibernate為了解決兩者之間的不同,使用對(duì)象標(biāo)識(shí)符(OID)來(lái)標(biāo)識(shí)對(duì)象的唯一性。OID是關(guān)系數(shù)據(jù)庫(kù)中主鍵在Java對(duì)象模型中的等價(jià)物。在運(yùn)行時(shí),Hibernate根據(jù)OID來(lái)維持Java對(duì)象和數(shù)據(jù)庫(kù)表中記錄的對(duì)應(yīng)關(guān)系。如下代碼所示,三次調(diào)用了Sessionload()方法,分別加載OID13User對(duì)象。

    Transaction tx = session.beginTransaction();
    User user1 =? (User)session.load(User.class,new Long(1));
    User user2 =? (User)session.load(User.class,new Long(1));
    User user3 =? (User)session.load(User.class,new Long(3));
    System.out.println( user1 == user2 );
    System.out.println( user1 == user3 );

    應(yīng)用程序在執(zhí)行上述代碼時(shí),第一次加載OID1User對(duì)象,從數(shù)據(jù)庫(kù)中查找ID1的記錄,然后創(chuàng)建相應(yīng)的User實(shí)例,并把它保存在Session緩存中,最后將該實(shí)例的引用賦值給變量user1。第二次加載OID1的對(duì)象時(shí),直接把Session緩存中OID1的實(shí)例的引用賦值給變量user2。因此,表達(dá)式user1==user2的結(jié)果為true

    標(biāo)識(shí)的生成可以使用不同的策略,表4.1Hibernate內(nèi)置的標(biāo)識(shí)生成策略。

    4.1? Hibernate標(biāo)識(shí)生成策略

    標(biāo)識(shí)符生成器

    描述

    increment

    適用于代理主鍵。由Hibernate自動(dòng)以遞增方式生成。

    identity

    適用于代理主鍵。由底層數(shù)據(jù)庫(kù)生成標(biāo)識(shí)符。

    sequence

    適用于代理主鍵。Hibernate根據(jù)底層數(shù)據(jù)庫(kù)的序列生成標(biāo)識(shí)符,這要求底層數(shù)據(jù)庫(kù)支持序列。

    hilo

    適用于代理主鍵。Hibernate分局high/low算法生成標(biāo)識(shí)符。

    seqhilo

    適用于代理主鍵。使用一個(gè)高/低位算法來(lái)高效的生成longshort或者int類(lèi)型的標(biāo)識(shí)符。

    native

    適用于代理主鍵。根據(jù)底層數(shù)據(jù)庫(kù)對(duì)自動(dòng)生成標(biāo)識(shí)符的方式,自動(dòng)選擇identitysequencehilo

    uuid.hex

    適用于代理主鍵。Hibernate采用128位的UUID算法生成標(biāo)識(shí)符。

    uuid.string

    適用于代理主鍵。UUID被編碼成一個(gè)16字符長(zhǎng)的字符串。

    assigned

    適用于自然主鍵。由Java應(yīng)用程序負(fù)責(zé)生成標(biāo)識(shí)符。

    foreign

    適用于代理主鍵。使用另外一個(gè)相關(guān)聯(lián)的對(duì)象的標(biāo)識(shí)符。

    2.5? Hibernate映射類(lèi)型

    在對(duì)象/關(guān)系映射文件中,Hibernate采用映射類(lèi)型作為Java類(lèi)型和SQL類(lèi)型的橋梁。Hibernate映射類(lèi)型分為2種:內(nèi)置映射類(lèi)型和自定義映射類(lèi)型。

    1? 內(nèi)置映射類(lèi)型

    Hibernate對(duì)所有的Java原生類(lèi)型、常用的Java類(lèi)型如StringDate等都定義了內(nèi)置的映射類(lèi)型。表4.2列出了Hibernate映射類(lèi)型、對(duì)應(yīng)的Java類(lèi)型以及對(duì)應(yīng)的標(biāo)準(zhǔn)SQL類(lèi)型。

    4.2? Hibernate內(nèi)置映射類(lèi)型

    Hibernate映射類(lèi)型

    Java類(lèi)型

    標(biāo)準(zhǔn)SQL類(lèi)型

    大小

    integer/int

    java.lang.Integer/int

    INTEGER

    4字節(jié)

    long

    java.lang.Long/long

    BIGINT

    8字節(jié)

    short

    java.lang.Short/short

    SMALLINT

    2字節(jié)

    byte

    java.lang.Byte/byte

    TINYINT

    1字節(jié)

    float

    java.lang.Float/float

    FLOAT

    4字節(jié)

    double

    java.lang.Double/double

    DOUBLE

    8字節(jié)

    big_decimal

    java.math.BigDecimal

    NUMERIC

    ?

    character

    java.lang.Character/java.lang.String/char

    CHAR(1)

    定長(zhǎng)字符

    string

    java.lang.String

    VARCHAR

    變長(zhǎng)字符

    boolean/ yes_no/true_false

    java.lang.Boolean/Boolean

    BIT

    布爾類(lèi)型

    date

    java.util.Date/java.sql.Date

    DATE

    日期

    timestamp

    java.util.Date/java.util.Timestamp

    TIMESTAMP

    日期

    calendar

    java.util.Calendar

    TIMESTAMP

    日期

    calendar_date

    java.util.Calendar

    DATE

    日期

    binary

    byte[]

    BLOB

    BLOB

    text

    java.lang.String

    TEXT

    CLOB

    serializable

    實(shí)現(xiàn)java.io.Serializablej接口的任意Java類(lèi)

    BLOB

    BLOB

    clob

    java.sql.Clob

    CLOB

    CLOB

    blob

    java.sql.Blob

    BLOB

    BLOB

    class

    java.lang.Class

    VARCHAR

    定長(zhǎng)字符

    locale

    java.util.Locale

    VARCHAR

    定長(zhǎng)字符

    timezone

    java.util.TimeZone

    VARCHAR

    定長(zhǎng)字符

    currency

    java.util.Currency

    VARCHAR

    定長(zhǎng)字符

    2? 自定義映射類(lèi)型

    Hibernate提供了自定義映射類(lèi)型接口,允許用戶(hù)以編程的方式創(chuàng)建自定義的映射類(lèi)型。用戶(hù)自定義的映射類(lèi)型需要實(shí)現(xiàn)net.sf.hibernate.UserTypenet.sf.hibernate.CompositeUserType接口。具體的創(chuàng)建自定義映射類(lèi)型的方法請(qǐng)參考hibernate官方文檔或相關(guān)資料,這里不再詳細(xì)介紹。


    3.1? 一對(duì)一映射

    Hibernate中,持久化對(duì)象間的一對(duì)一關(guān)聯(lián)是通過(guò)one-to-one元素定義的。其定義方式如下所示。

    <one-to-one
    ??????? name="propertyName"
    ??????? class="ClassName"
    ??????? cascade="all|none|save-update|delete"
    ??????? constrained="true|false"????????????????? ?????????
    ??????? outer-join="true|false|auto"????????????? ?????????
    ??????? property-ref="propertyNameFromAssociatedClass" ??
    ??????? access="field|property|ClassName"??????????????? ?
    />

    在這段代碼中,name是指屬性的名字,class指的是被關(guān)聯(lián)的類(lèi)的名字。cascade是可選項(xiàng),表明操作是否從父對(duì)象級(jí)聯(lián)到被關(guān)聯(lián)的對(duì)象。constrained表明該類(lèi)對(duì)應(yīng)的表對(duì)應(yīng)的數(shù)據(jù)庫(kù)表,和被關(guān)聯(lián)的對(duì)象所對(duì)應(yīng)的數(shù)據(jù)庫(kù)表之間,通過(guò)一個(gè)外鍵引用對(duì)主鍵進(jìn)行約束。

    outer-join也是可選項(xiàng),它指的是當(dāng)設(shè)置hibernate.use_outer_join的時(shí)候,對(duì)這個(gè)關(guān)聯(lián)允許外連接抓取。property-ref指定關(guān)聯(lián)類(lèi)的一個(gè)屬性,這個(gè)屬性將會(huì)和本外鍵相對(duì)應(yīng)。如果沒(méi)有指定,會(huì)使用對(duì)方關(guān)聯(lián)類(lèi)的主鍵。accessHibernate用來(lái)訪問(wèn)屬性的策略。

    一對(duì)一關(guān)聯(lián)有兩種不同的形式,即主鍵關(guān)聯(lián)和唯一外鍵關(guān)聯(lián):

    1? 主鍵關(guān)聯(lián)

    主鍵關(guān)聯(lián)不需要額外的表字段。如下所示的代碼,將StudentPerson表的主鍵進(jìn)行一對(duì)一關(guān)聯(lián):

    <one-to-one name="person" class="Person"/>

    <one-to-one name="student" class="Student" constrained="true"/>

    PersonStudent兩個(gè)表中相關(guān)字段是對(duì)等的。在下面的代碼中,Person表的主鍵將采用foreign的方式生成。

    <class name="Person" table=" Person ">
    ??? <id name="id" column=" Person _ID">
    ??????? <generator class="foreign">
    ??????????? <param name="property">employee</param>
    ??????? </generator>
    ??? </id>
    ??? ...
    ??? <one-to-one name="Student"
    ??????? class="Student"
    ??????? constrained="true"/>
    </class>

    2? 惟一外鍵關(guān)聯(lián)

    此種關(guān)聯(lián)方式是指一個(gè)外鍵與一個(gè)惟一的關(guān)鍵字相關(guān)聯(lián),上面的StudentPerson的例子,如果使這種關(guān)聯(lián)方式,應(yīng)該表達(dá)成:

    <many-to-one name=" Person " class="Person" column=" Person _ID" unique="true"/>

    3.2? 多對(duì)一映射

    持久化對(duì)象間的多對(duì)一關(guān)聯(lián)是通過(guò)many-to-one元素定義的。其定義方式如下所示。

    <many-to-one
    ??????? name="propertyName"
    ??????? column="column_name"
    ??????? class="ClassName"
    ??????? cascade="all|none|save-update|delete"
    ??????? outer-join="true|false|auto"
    ??????? update="true|false"
    ??????? insert="true|false"
    ??????? property-ref="propertyNameFromAssociatedClass"
    ??????? access="field|property|ClassName"
    />

    在這段代碼中,name指類(lèi)的屬性名,column指表的字段名,class是可選項(xiàng),指關(guān)聯(lián)的類(lèi)的名字。cascade指明哪些操作會(huì)從父對(duì)象級(jí)聯(lián)到關(guān)聯(lián)的對(duì)象,outer-join指的是當(dāng)設(shè)置hibernate.use_outer_join的時(shí)候,對(duì)這個(gè)關(guān)聯(lián)允許外連接抓取。update用于指定對(duì)應(yīng)的字段是否用于UPDATEproperty-ref用于指定關(guān)聯(lián)類(lèi)的一個(gè)屬性,這個(gè)屬性將會(huì)和本外鍵相對(duì)應(yīng),access為可選項(xiàng),指訪問(wèn)屬性的策略。

    4.4 Hibernate的檢索方式

    Hibernate的檢索方式主要有HQLQBCQBE檢索等幾種方式。Hibernate查詢(xún)語(yǔ)言(Hibernate Query Language,簡(jiǎn)稱(chēng)HQL)是一種面向?qū)ο蟮牟樵?xún)語(yǔ)言。HQL功能強(qiáng)大且簡(jiǎn)單易學(xué),它具有以下功能。

    • 在查詢(xún)語(yǔ)句中設(shè)定各種查詢(xún)條件。
    • ?支持投影查詢(xún),即僅檢索出對(duì)象的部分屬性。
    • ?支持分頁(yè)查詢(xún)。
    • ?支持連接查詢(xún)。
    • ?支持分組查詢(xún),允許使用havinggroup by關(guān)鍵字。
    • ?提供內(nèi)置聚集函數(shù),如sum()min()max()等。
    • ?能夠調(diào)用用戶(hù)自定義的SQL函數(shù)。
    • ?支持子查詢(xún),即嵌入式查詢(xún)。
    • ?支持動(dòng)態(tài)綁定參數(shù)。

    Session接口的find()方法及Query接口都支持HQL檢索方式。如下代碼是一個(gè)使用Query接口查詢(xún)的示例。

    //創(chuàng)建一個(gè)Query對(duì)象
    Query query = session.createQuery ( “form User as u where u.name=:userName” + “ and u.age=:userAge” ) ;
    ?
    //動(dòng)態(tài)綁定參數(shù)
    query.setString( “userName” , “Bush” );
    query.setString( “userAge” , “50” );
    ?
    //執(zhí)行查詢(xún)語(yǔ)句,返回查詢(xún)結(jié)果X
    List results = query.list();

    Query By CriteriaQBC)和Query By ExampleQBE)提供了檢索對(duì)象的其他方式,這些檢索方式主要由Criteria接口、Criterion接口、Expression類(lèi)和Example類(lèi)組成,支持在運(yùn)行時(shí)動(dòng)態(tài)生成查詢(xún)語(yǔ)句。關(guān)于QBCQBE的內(nèi)容可以參考Hibernate官方文檔或相關(guān)書(shū)籍,這里不再詳細(xì)介紹。

    posted on 2007-03-31 22:00 天外飛仙 閱讀(531) 評(píng)論(2)  編輯  收藏 所屬分類(lèi): hibernate

    Feedback

    # QQ炫舞 2009-09-03 20:28 蔣龍
    jnfds   回復(fù)  更多評(píng)論
      

    # QQ炫舞 2009-09-03 20:28 蔣龍
    好  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 亚洲一级免费视频| 成人毛片视频免费网站观看| 69成人免费视频无码专区| 人人狠狠综合久久亚洲高清| 亚洲小视频在线观看| 亚洲成a人无码亚洲成av无码| 最近更新免费中文字幕大全| 无码国产精品久久一区免费| 国产亚洲老熟女视频| 亚洲欧洲免费无码| 国产精品偷伦视频观看免费| 日韩一区二区三区免费体验| 亚洲gv白嫩小受在线观看| 亚洲人成网站在线播放2019| 大地资源中文在线观看免费版| 高清国语自产拍免费视频国产| 国产亚洲一区二区在线观看| 亚洲男人的天堂网站| 一个人免费日韩不卡视频| 免费人成视频在线观看视频| 亚洲春色另类小说| 中文字幕无码免费久久9一区9| 成人免费无毒在线观看网站| 亚洲AV无一区二区三区久久| 精品国产亚洲一区二区三区在线观看 | 国产又黄又爽又刺激的免费网址 | 亚洲成av人片在线观看天堂无码| 亚洲视频在线观看视频| 国产精品内射视频免费| 四虎免费在线观看| 亚洲精品影院久久久久久| A毛片毛片看免费| 国产免费午夜a无码v视频| 亚洲一卡2卡4卡5卡6卡残暴在线| a毛片免费观看完整| 免费人成无码大片在线观看| 亚洲激情视频图片| 91青青国产在线观看免费| 亚洲无人区午夜福利码高清完整版 | 亚洲第一网站免费视频| 亚洲级αV无码毛片久久精品|