<><br>>まとめ


一.全体概説:Hibernateの底辺もJDBCによって実現される。は、オブジェクト/関係マップ(Object/Relation Mapping)の解決策であり、オブジェクト関係マップを自動的にxmlに従って完了し、データベースのオープンソースコンポーネントに永続化することができる。オブジェクトを永続化して、データを永続的な記憶媒体(データベース)OR/M(object relation mapping)オブジェクト関係にマッピングします。POJO類は、標準的なJava Beanです。二、全体のhibernate.cfg.xmlプロファイルとXXXX.hbm.xmlの構成:hibernateのシステムプロファイルの名前は、一般的にはhibernate.cfg.xmlと呼ばれ、エンティティマッピングファイル名はクラス名となります。hbm.xml。マッピングクラスのxmlファイルとエンティティ類を一緒に置くのが一般的です。hibernature.cfg.xmlにデータベースの接続情報を設定し、他のマッピングファイルのファイル名を参照し、他の設定もあります。この書類は普通プロジェクトのルートディレクトリの下に置いてあります。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> 
<property name="show_sql">true</property> 
//  sql    
<property name="format_sql">true</property> 
//    sql       
<property name="dialect">...</property> 
//           
<property name="connection.driver_class">....</property> 
<!--         --> 
<property name="connection.url">....</property> 
<!--        url--> 
<property name="connection.username">...</property> 
<!--         --> 
<property name="connection.password">...</property> 
<!--        --> 
<property name="xml2ddl.auto">create/update/none</property> 
<!--      --> 
<mapping resource="xxx/xxxx/Xxxxxx.hbm.xml"/> 
<!--        xml           --> 
</session-factory> 
</hibernate-configuration> 
 現在はNetBensで自動的に注釈などが生成されますが、必要ではありません。ヒベルナのマッピング類のXXXX.hbm.xmlの書き方対象関係マップ
<?xml version="1.0" encoding="gbk"?> 
<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<hibernate-mapping package="XXX.XXX.XXX"> 
<!--       --> 
<class name="Xxxxxx" table="Xxxxx"> 
<!--            --> 
<id name="studentId" column="studentId"> 
<generator class="native"/> 
<!--      --> 
</id> 
<property name="XXX" column="XXXX" type="string"/> 
<!--              --> 
<property name="homeAddress" column="homeAddress"/> 
<property name="schoolAddress" column="schoolAddress"/> 
<property name="brithday" column="brithday" type="data"/> 
<!-- hibernate              Data       --> 
</class> 
</hibernate-mapping> 
 三.Hibernateでのクラス関係の処理:one-to-one関係はデータベースにどう反映されていますか?JavaBeanではどのように表現されていますか?Hibernaneではどのようにマッピングされますか?1、データベースの中で:一つの表の外健はもう一つの表の健健健に対応して、外健はUnique制約(外健関連)を加えます。または2つの表は、1つのメイン健を共有し、サブテーブルのpkが親テーブルのpkを外部健として同時に参照して存在することを示している(メイン健関連、サブテーブルのpkとfkは1つのフィールドである)。2、javaBeanでは、JavaBeanに属性を一つ追加します。つまり、もう一つのオブジェクトの参照は、一方向でも双方向でもいいです。3、ヒベルナで:A、メイン健マッピング:全部one-to-oneでforeignで策略を生成します。   自動車carとエンジンEngine(一対一の関係)を例にします。  a、マスタカード.hbm.xmlの書き方 
<class name="Car" table="car_pk"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="name" column="name" type="string" /> 
    <one-to-one name="engine" class="Engine" cascade="all"/> 
  </class>
  注:cascade="all"は、Cardオブジェクトを削除したり、削除したり、修正したりする際にカスケードオブジェクトを表します。カスケードは、メインオブジェクトのマッピングファイルに必ずあります。  b、付表Engine.hbm.xmlの書き方
<class name="Engine" table="engine_pk"> 
    <id name="id" column="id" type="integer"> 
      <generator class="foreign"> 
        <param name="property">car</param> 
      </generator> 
    </id> 
    <property name="model" column="model" type="string" /> 
    <one-to-one name="car" class="Car" constrained="true"/> 
  </class> 
 注:construained=「true」はEngineがCanの主健を外健として応用したと表しています。B、外部健マッピング(唯一の外形キー):メインテーブルではone-to-oneを使い、副表はproperty-refを通ります。  many-to-oneで実現します。  a、マスタカード.hbm.xmlの書き方 
<class name="Car" table="car_fk"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="name" column="name" type="string" /> 
<one-to-one name="engine" class="Engine" 
property-ref="car" cascade="save-update"/> 
  </class>
  注:name=「engine」property-ref=「car」はengine表にcar表の主健を彼の外健として引用しました。cascade=「save-udate」は増加を表しています。Carオブジェクトを変更する時は、カスケードが増えて、Enggineオブジェクトが修正されます。  b、付表Engine.hbm.xmlの書き方 
<class name="Engine" table="engine_fk"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="model" column="model" type="string" /> 
<many-to-one name="car" class="Car" unique="ture"  column="carid"/> 
  </class>
  注:unique=「ture」column=「carid」は、engineテーブルの外部健caridに一意の制約を加え、一つの対多関係を強制的に一対一の関係に転化させることを意味します。many-to-one関係はデータベースの中でどのように体現していますか?JavaBeanの中でどのように体現していますか?Hibernateの中でどのように1、データベースの中にマッピングしますか?2、javaBeanでは、一つのオブジェクトは別のオブジェクトの一つの参照を含み、もう一つのオブジェクトはこのオブジェクトのセット(集合、set)で参照されます。3、hibernateで:set、keyで具体的な列を指定します。注文書Order(一方)と注文項目Item(多方面)を例にとって、a、Order.hbm.xmlの書き方:
<class name="Order" table="ec_order"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="owner" column="owner" type="string" /> 
    <property name="phone" column="phone" type="string" /> 
    <property name="address" column="address" type="string" /> 
    <set  name="items" cascade="all-delete-orphan" inverse="true"> 
      <key column="orderid" /> 
      <one-to-many class="Item" /> 
    </set> 
  </class> 
 注:inverse=「true」は、集合端の変化を無視することを意味します。cascade=「all-delete-orphan」:これはちょっと面倒です。cascadeをallに設定した場合を見に来ました。session.deleteを呼び出した時、orderの下のすべてのitemは削除されますが、order.getItems()を呼び出したら、remove(item)を呼び出して、session.ders.up.ordent.orderは削除されません。アイテム表にそのアイテムが記録されているorder_idはnullに設定されています。したがって、order.getItems.removeによってオブジェクトを削除するには、既存のカスケードの上に「delete-orphan」を追加する必要があります。b、Item.hbm.xmlの書き方
<class name="Item" table="ec_item"> 
    <id name="id" column="id" type="integer"> 
      <generator class="native" /> 
    </id> 
    <property name="product" column="product" type="string" /> 
    <property name="amount" column="amount" type="integer" /> 
    <many-to-one name="order" class="Order" column="orderid"/> 
  </class> 
 many-to-many関係:授業と学生を例にとって、student_courselinkはリンクテーブルで、両端はすべて指定します。a.Student.hbm.xml 
<hibernate-mapping> 
    <class name="com.test.Student" table="student" > 
        <id name="sid" type="string" unsaved-value="null" > 
            <column name="sid" sql-type="char(32)" not-null="true"/> 
            <generator class="uuid.hex"/> 
        </id> 
        <property name="sname"> 
            <column name="sname" sql-type="varchar(16)" not-null="true"/> 
        </property> 
        <set name="course" table="student_course_link" cascade="all" outer-join="false"> 
            <key column="sid"/> 
            <many-to-many class="com.test.Course" column="cid"/> 
        </set> 
    </class> 
</hibernate-mapping>
  b.C.ourse.hbm.xml
<hibernate-mapping> 
    <class name="com.test.Course" table="course" > 
        <id name="cid" type="string" unsaved-value="null" > 
            <column name="cid" sql-type="char(32)" not-null="true"/> 
            <generator class="uuid.hex"/> 
        </id> 
        <property name="cname"> 
            <column name="cname" sql-type="varchar(16)" not-null="true"/> 
        </property> 
        <set name="student" table="student_course_link" lazy="false" cascade="all"> 
            <key column="cid"/> 
            <many-to-many class="com.test.Student" column="sid"/> 
        </set> 
    </class> 
</hibernate-mapping> 
 四.基本的なヒベルナツを使うAPIを符号化する:hibernateを使用して手順a、配置環境をプログラミングし、hibernateのjarファイルをロードし、データベース接続に使用されるjarファイルを接続し、CLASSPATH環境変数を配置する。b、hibernateを書くために必要な配置ファイルは、hibernate.cfg.xml、Xxxxxxx.hbm.xml c、POJO類を書く\は標準的なJava Beanです。d、hibernate APIを呼び出します。どのようにhibernature APIを呼び出しますか?e、Configrationオブジェクトを作成します。解析プロファイル)Configration   config=newConfigration().configure()/。configre()メソッドは、CLASSPATHの下でhibernate.cfg.xml fを探し、Configrationを通じてSession Factoryを作成します。Session Factory  session Factory=config.buildSession Factory()//Session Factoryオブジェクトgを作成し、Session Factoryによりセッションオブジェクトを作成します。セッション  session=session Factory.openSession()//Sessionオブジェクトhを作成し、Sessionにより事務対象を取得する。Transation  trans=session.begintTransation()//事務を開始する(事物オブジェクトを作成する)i、セッションを通してデータベースと会話する。session.save(Object o)//増session.update(Object o)//session.saveOrUpdateを変更します。/session.deleteを追加または更新します。削除session.get(Class clazz、Serializable id);Idによって対象を探して、見つけられないならnullに戻ります。session.load(Class clazz、Serializable id);Idによって対象を探していますが、見つけられないと異常を報告します。session.reat Query(String sql)//自分でHQL言語で相手を探してQueryオブジェクトを返します。j、作業を提出し、事務を終了する。Trans.com mmit()k、Session session.close();