<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      我的O/R Mapping實際開發經驗之談(二)

      [摘要]三、現有的O/R Mapping產品介紹 O/R Mapping已經出現很久了, 產品很多:Java方面的有Hibernate、jdo等。.Net的有ObjectSpaces、Grove.N...
      三、現有的O/R Mapping產品介紹

      O/R Mapping已經出現很久了, 產品很多:Java方面的有Hibernate、jdo等。.Net的有ObjectSpaces、Grove.Net、OJB.Net、AtomsFramework、Objectz.Net、OPF.Net等。



      1、Hibernate

      Hibernate是一個java開放源代碼的O/R Mapping,它對JDBC進行了輕量級的對象封裝,可以非常靈活的用對象編程思維來操縱數據庫,F在以一個簡單的demo看下Hibernate是怎樣使用的:



      首先Hibernate需要一個hibernate.cfg.xml配置文件

      <?xml version='1.0' encoding='utf-8'?>

      <!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">

      <hibernate-configuration>

      <session-factory>

      <!-數據庫的配置 -->

      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/quickstart </property>

      <property name="hibernate.connection.username">dbusername</property>

      <property name="hibernate.connection.password">dbpassword</property>

      <property name="hibernate.connection.pool.size">30</property>

      <property name="hibernate.dialect">net.sf.hibernate.dialect.MySQLDialect</property>

      <!-持久化類映射的XML文件名 -->

      <Mapping resource=" ormappingdemo.hibernate.Customer.xml"/>

      </session-factory>

      </hibernate-configuration>





      一個需要持久化類的表:Customer

      CREATE TABLE dbo.Customer (

      customerID int,

      CustomerName varchar(100) NULL,

      )





      在Hibernate需要定義一個Customer.xml映射文件

      <?xml version="1.0"?>

      <!DOCTYPE hibernate-Mapping

      PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"

      "http://hibernate.sourceforge.net/hibernate-Mapping-2.0.dtd">



      <hibernate-Mapping>



      <!-定義持久化類的類名和所映射的表名 -->

      <class name="ormappingdemo.hibernate.Customer" table="Customer">



      <!-定義主鍵 -->

      <id name="customerID" type="int" unsaved-value="null" >

      <column name="customerID " sql-type="int" not-null="true"/>



      <!-主鍵的生成規則,"increment"表示該主鍵是自遞增,hibernate有10多種的主鍵生成方法-->

      <generator class="increment">

      </generator>

      </id>

      <!-定義類的屬性 -->

      <property name="Name">

      <!-所映射的字段,這里可以看出表的字段名可以跟類屬性名完全不同 -->

      <column name="CustomerName" sql-type="varchar(100)" not-null="true"/>

      </property>

      </class>

      </hibernate-Mapping>





      Customer.xml里面定義了很多類的屬性和表的字段的詳細信息,如果有變動的,只需要更改這個xml文件就行。Hibernate定義mapping比較靈活, property也可以不定義property里面的內容,用缺省的形式。

      除了這個xml文件,還要有一個持久化類:Customer

      package ormappingdemo.hibernate;



      public class Customer {



      private int customerID;

      private String name;



      public Customer() {

      }

      //全部的屬性都要通過get、set方法來訪問

      public int getCustomerID() {

      return customerID;

      }



      public void setCustomerID(int customerID) {

      this.customerID = customerID;

      }



      public String getName() {

      return name;

      }



      public void setName(String name) {

      this.name = name;

      }

      }





      Customer是個“瘦”類,持久化類不需要實現什么特別的接口,也不需要從一個特別的持久化父類繼承下來。到現在為止,一個Customer的映射的持久化類工作完成,而這部分工作,可以通過Hibernate的一個Schema 生成器的工具自動完成。現在,我們可以使用這個類了:

        //建立一個Session工廠

        SessionFactory sessionFactory =

      new Configuration().configure().buildSessionFactory();



        //打開一個Session

        Session session = sessionFactory.openSession();



        //開始事務

        Transaction tx = session.beginTransaction();



        //初始化一個持久化類

        Customer theCustomer = new Customer();



        //賦值

        theCustomer.setName("Karl");



        //保存新建的持久化類

        session.save(theCustomer);



        //提交事務

        tx.commit();



        //關閉Session

        session .close();





      這段代碼,你看不出任何傳統跟數據庫打交道的代碼,需要的只是用持久化類和幾個工廠化的類,就可以實現全部的功能。Hibernate還有一種極其強大的查詢語言HQL,看上去很像SQL。但HQL是完全面向對象的。

      Transaction tx = session.beginTransaction();



      //通過HQL語言進行查詢。注意,這里的HQL是對象與屬性,不是表和字段。如Name是持久化類的屬性,真正所映射的表字段名是CustomerName

      Query query = session.createQuery("select Name from Customer as customer where customer.customerID>=:ID");



      query.setInteger("ID", 1);



      //用迭代遍歷Customer

      for (Iterator it = query.iterate(); it.hasNext();) {

      Customer theCustomer = (Customer) it.next();

      out.println("Customer : " + theCustomer.getName() );

      }



      tx.commit();





      Hibernate的功能極其強大,結構合理,并且完全開發源代碼,不需要license。無論是否用java,仔細研究Hibernate,對學習和開發O/R Mapping都有莫大的益處。



      2、Castor JDO

      Castor JDO(Java 數據對象 (Java Data Objects))也是一種開放源碼的、百分之百 Java 數據綁定框架。

      Castor JDO 最早發布于 1999 年 12 月,它是第一批可用的開放源碼數據綁定框架之一。自那時以來,這項技術已獲得了長足的發展。現在,往往將 Castor JDO 同許多其它技術(既有開放源碼的,也有商業的)結合使用,以將 Java 對象模型綁定到關系數據庫、XML 文檔以及 LDAP 目錄上。

      同樣這一節也是以一個demo來講一下Castor JDO,

      Castor JDO 叫做 Java 數據對象 同樣用了類似于 類似 javabean 的類來存儲字據并表示數據之間的關系。

      應用程序主要負責設置數據庫連接和管理事務處理。數據庫的設置是通過一個與映射文件相連接的獨立的XML文件來實現的。

      看看下面如同Hibernate的sessionFactory一樣,Castor JDO 也封裝了一個處理數據庫資源的類,是org.exolab.castor.jdo.JDO,在里面定義了數據庫的名字和屬性,并被用來打開一個數據庫連接。

      我們可以通過使用setConfiguration命令來指定配置文件URL,我們可以裝載數據庫的配置。使用同一個配置來創建多個JDO對象只會裝載配置文件一次。



      下面的代碼片展示了在如何打開一個數據庫,并進行一個事務處理,然后關閉數據庫的過程。

      // 定義JDO對象

      jdo = new JDO();

      jdo.setDatabaseName( "CustomerDemo" );

      jdo.setConfiguration( "database.xml" );

      jdo.setClassLoader( getClass().getClassLoader());

      // 獲取一個新的數據庫

      db = jdo.getDatabase();

      // 開始事務處理

      db.begin();



      // 事務過程

      . . .

      // 提交事務,關閉數據庫

      db.commit();

      db.close();




      <>


      日韩精品一区二区三区高清