国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:17:11
字體:
來源:轉載
供稿:網友
三、現有的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進行了輕量級的對象封裝,可以非常靈活的用對象編程思維來操縱數據庫。現在以一個簡單的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 生成器的工具自動完成?,F在,我們可以使用這個類了:

  //建立一個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();





(待續)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆化县| 会东县| 保山市| 海原县| 疏勒县| 多伦县| 巢湖市| 斗六市| 晴隆县| 邵阳市| 成安县| 安远县| 祥云县| 开鲁县| 东明县| 田林县| 祥云县| 安康市| 白朗县| 铁岭县| 定边县| 宿迁市| 铜川市| 民丰县| 合水县| 肇庆市| 讷河市| 车致| 宜川县| 东明县| 南溪县| 卫辉市| 卓资县| 安化县| 惠水县| 麟游县| 开封县| 门头沟区| 聊城市| 天祝| 专栏|