• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當(dāng)前位置:雨林木風(fēng)下載站 > 技術(shù)開發(fā)教程 > 詳細(xì)頁面

        我的O/R Mapping實(shí)際開發(fā)經(jīng)驗(yàn)之談(二)

        我的O/R Mapping實(shí)際開發(fā)經(jīng)驗(yàn)之談(二)

        更新時(shí)間:2019-05-30 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

        三、現(xiàn)有的O/R Mapping產(chǎn)品介紹

        O/R Mapping已經(jīng)出現(xiàn)很久了, 產(chǎn)品很多:Java方面的有Hibernate、jdo等。.Net的有ObjectSpaces、Grove.Net、OJB.Net、AtomsFramework、Objectz.Net、OPF.Net等。



        1、Hibernate

        Hibernate是一個(gè)java開放源代碼的O/R Mapping,它對(duì)JDBC進(jìn)行了輕量級(jí)的對(duì)象封裝,可以非常靈活的用對(duì)象編程思維來操縱數(shù)據(jù)庫。現(xiàn)在以一個(gè)簡(jiǎn)單的demo看下Hibernate是怎樣使用的:



        首先Hibernate需要一個(gè)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>

        <!-數(shù)據(jù)庫的配置 -->

        <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>





        一個(gè)需要持久化類的表:Customer

        CREATE TABLE dbo.Customer (

        customerID int,

        CustomerName varchar(100) NULL,

        )





        在Hibernate需要定義一個(gè)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"/>



        <!-主鍵的生成規(guī)則,"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里面定義了很多類的屬性和表的字段的詳細(xì)信息,如果有變動(dòng)的,只需要更改這個(gè)xml文件就行。Hibernate定義mapping比較靈活, property也可以不定義property里面的內(nèi)容,用缺省的形式。

        除了這個(gè)xml文件,還要有一個(gè)持久化類: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是個(gè)“瘦”類,持久化類不需要實(shí)現(xiàn)什么特別的接口,也不需要從一個(gè)特別的持久化父類繼承下來。到現(xiàn)在為止,一個(gè)Customer的映射的持久化類工作完成,而這部分工作,可以通過Hibernate的一個(gè)Schema 生成器的工具自動(dòng)完成。現(xiàn)在,我們可以使用這個(gè)類了:

          //建立一個(gè)Session工廠

          SessionFactory sessionFactory =

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



          //打開一個(gè)Session

          Session session = sessionFactory.openSession();



          //開始事務(wù)

          Transaction tx = session.beginTransaction();



          //初始化一個(gè)持久化類

          Customer theCustomer = new Customer();



          //賦值

          theCustomer.setName("Karl");



          //保存新建的持久化類

          session.save(theCustomer);



          //提交事務(wù)

          tx.commit();



          //關(guān)閉Session

          session .close();





        這段代碼,你看不出任何傳統(tǒng)跟數(shù)據(jù)庫打交道的代碼,需要的只是用持久化類和幾個(gè)工廠化的類,就可以實(shí)現(xiàn)全部的功能。Hibernate還有一種極其強(qiáng)大的查詢語言HQL,看上去很像SQL。但HQL是完全面向?qū)ο蟮摹?br>
        Transaction tx = session.beginTransaction();



        //通過HQL語言進(jìn)行查詢。注意,這里的HQL是對(duì)象與屬性,不是表和字段。如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的功能極其強(qiáng)大,結(jié)構(gòu)合理,并且完全開發(fā)源代碼,不需要license。無論是否用java,仔細(xì)研究Hibernate,對(duì)學(xué)習(xí)和開發(fā)O/R Mapping都有莫大的益處。



        2、Castor JDO

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

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

        同樣這一節(jié)也是以一個(gè)demo來講一下Castor JDO,

        Castor JDO 叫做 Java 數(shù)據(jù)對(duì)象 同樣用了類似于 類似 javabean 的類來存儲(chǔ)字據(jù)并表示數(shù)據(jù)之間的關(guān)系。

        應(yīng)用程序主要負(fù)責(zé)設(shè)置數(shù)據(jù)庫連接和管理事務(wù)處理。數(shù)據(jù)庫的設(shè)置是通過一個(gè)與映射文件相連接的獨(dú)立的XML文件來實(shí)現(xiàn)的。

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

        我們可以通過使用setConfiguration命令來指定配置文件URL,我們可以裝載數(shù)據(jù)庫的配置。使用同一個(gè)配置來創(chuàng)建多個(gè)JDO對(duì)象只會(huì)裝載配置文件一次。



        下面的代碼片展示了在如何打開一個(gè)數(shù)據(jù)庫,并進(jìn)行一個(gè)事務(wù)處理,然后關(guān)閉數(shù)據(jù)庫的過程。

        // 定義JDO對(duì)象

        jdo = new JDO();

        jdo.setDatabaseName( "CustomerDemo" );

        jdo.setConfiguration( "database.xml" );

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

        // 獲取一個(gè)新的數(shù)據(jù)庫

        db = jdo.getDatabase();

        // 開始事務(wù)處理

        db.begin();



        // 事務(wù)過程

        . . .

        // 提交事務(wù),關(guān)閉數(shù)據(jù)庫

        db.commit();

        db.close();




        <>

        溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

        本類教程下載

        系統(tǒng)下載排行

        主站蜘蛛池模板: 日本亚洲视频在线| 免费一级全黄少妇性色生活片 | 国产乱子精品免费视观看片| 亚洲国产激情一区二区三区| 亚洲一二成人精品区| 久青草国产免费观看| 成年女性特黄午夜视频免费看| 久久亚洲高清观看| 青青青国产在线观看免费网站| 亚洲精品天天影视综合网| a级毛片免费高清视频| 午夜国产大片免费观看| 91亚洲自偷在线观看国产馆| 九九九精品视频免费| 久久亚洲日韩看片无码| 久久久久久夜精品精品免费啦 | 四虎免费久久影院| 日本免费人成视频在线观看| 亚洲AV无码男人的天堂| 成年女人免费视频播放77777| 丰满少妇作爱视频免费观看| 亚洲国产精品乱码在线观看97| 国产精品久久久久久久久免费| 暖暖免费中文在线日本| 亚洲综合色区中文字幕| 一本岛高清v不卡免费一三区| 无码日韩人妻AV一区免费l| 日韩亚洲变态另类中文| 国产在线观看无码免费视频| 2048亚洲精品国产| 成人国产精品免费视频| 亚洲国产成人无码AV在线| 国产一级淫片免费播放| 91香蕉成人免费网站| 精品国产麻豆免费人成网站| 亚洲香蕉免费有线视频| 国产亚洲精品成人AA片新蒲金| 在线看片无码永久免费aⅴ| 黄色免费网站在线看| 亚洲综合色婷婷七月丁香| 国产精品免费一级在线观看|