三、现有的O/R Mapping产品介绍

接上)

具体过程如下:

(1)首先建立数据库配置文件,我们在这里定为database.xml,当然也可以改成是其它名字。

<?xml version="1.0" encoding="gb2312"?>

<database name="CustomerDemo" engine="mysql">

<driver url="jdbc:mysql://cwb:3306/quickstart" class-name="org.gjt.mm.mysql.Driver">

<param name="user" value="dbusername"/>

<param name="password" value="dbpassword "/>

</driver>

<mapping href="Customer.xml"/>

</database>

建立影射文件Customer.xml

<?xml version="1.0" encoding="gb2312"?>

<class name="Demo.Customer" access="shared" identity="customerID">

<map-to table="users"/>

<field name="customerID" type="integer">

<sql name="customerID" type="integer"/>

</field>

<field name="name" type="string">

<sql name="name" type="varchar"/>

</field>

</class>

建立持久化类,与hibernate的是一样的类似javabean的类

package Demo;

public class Customer {

private String name;

private int customerID;

public Customer() {

}

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;

}

}

基本的实现后,我们可以看看这个demo怎么运行。

import java.util.*;

import org.exolab.castor.jdo.*;

import java.net.*;

public class CustomerManager {

JDO jdo;

Database db;

public CustomerManager() throws DatabaseNotFoundException,

PersistenceException {

//定义一个JDO对象

jdo = new JDO();

jdo.setDatabaseName("CustomerDemo");

jdo.setConfiguration("database.xml");

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

//获得连接数据库

db = jdo.getDatabase();

}

/**

* 用于读取用户

* @param id Customer 对象的主键

*/

public Customer loadCustomer(Integer id) throws DatabaseNotFoundException,

PersistenceException {

Customer result = null;

//开始事务

db.begin();

result = (Customer) db.load(Customer.class, id);

//完成事务,关闭数据库

db.commit();

db.close();

return result;

}

/**

* 用于建立用户

* @param Customer newCustomer 新对象

*/

public void createCustomer(Customer newCustomer) throws

DatabaseNotFoundException,

PersistenceException {

Customer result = null;

db.begin();

//新建Customer

db.create(newCustomer);

db.commit();

db.close();

}

/**

* 更新旧的对象

*/

public Customer updateCustomer(Customer updateCustomer) throws

DatabaseNotFoundException,

PersistenceException {

db.begin();

//更新Customer

db.update(updateCustomer);

db.commit();

db.close();

return null;

}

public void removeCustomer(Customer removeCustomer) throws

DatabaseNotFoundException,

PersistenceException {

db.begin();

//删除Customer

db.remove(removeCustomer);

db.commit();

db.close();

}

}

在Castor JDO对象模型上执行查询

Castor 实现了对象查询语言(OQL)的 ODMG 3.0 规范的一个子集。OQL 的语法类似于 SQL 的语法,但它却使您能够查询对象模型,而不是直接查询数据库。在支持多个数据库时,这可能是一项强大的功能。Castor 的 OQL 实现在内部将 OQL 查询转换成用于数据库的适当的 SQL。使用 bind() 方法将参数绑定到查询上。以下是 OQL 查询的一些简单示例。

Castor 的 OQL 实现并不在整个查询中继续使用全限定对象名,相反它支持对象别名的使用。在下面的这些查询中,c 就是这样的一个别名。

如果想要查询以找出所有 Customer,可以执行下列查询:

SELECT c FROM Demo.Customer c

如果想要查询以找出标识等于 1234 的Customer,可以以:

SELECT c FROM Demo.Customer c WHERE c.CustomerID= $1

开始,后跟:

query.bind( 1234 )

要查询名称与特殊字符串相似的 Customer,可以执行下列查询:

SELECT c FROM Demo.Customer c WHERE c.name LIKE $1

后跟:

query.bind( "%abcd%" )

3、ObjectSpaces

ObjectSpaces是微软.Net下面的O/R Mapping,到目前为止还是Beta版,相信会在VS.Net 2004出现正式版。.Net下的O/R Mapping没有像java方面那样的兴旺,开放源码的也不多,OJB. Net、AtomsFramework、OPF.Net等,都有相当的知名度,但还在不断的成熟之中。ADO.Net功能强大,与JDBC有很多不同的地方,所以.Net下的O/R Mapping有很多自己的特色。

现在简单的介绍下ObjectSpaces的用法,大家可以跟Hibernate和JDO比较一下。

ObjectSpaces同样有一个配置Source.xml文件:

<sources xmlns="http://www.microsoft.com/ObjectSpaces-v1">

<!-数据连接的配置-->

<source name="Demo" adapter="sql" connection="Data Source=LocalHost; Integrated Security=SSPI; Database=CustomerDemo"/>

</sources>

每个持久化类也有对应的一个map.xml:

<map xmlns="http://www.microsoft.com/ObjectSpaces-v1">

<type name="Customer" dataSource="customer">

<property name="customerID" dataSource="customerID"/>

<property name="Name" dataSource="CustomerName"/>

</type>
</map>

大家有Hibernate上面的例子,相信很容易看得懂这段xml,很多都是大同小异。同样,也需要一个持久化类:

public abstract class Customer

{

//定义主键

[UniqueId] public abstract int customerID { get; set; }

//同样定义属性

public abstract string Name { get; set; }

public void OnCreate(int newId)

{

customerID = newId;

}

}

使用的例子:

//装入Source.xml,建立ObjectSpace工厂

IObjectSpace os = ObjectSpaceFactory.CreateObjectSpace("Source.xml");

//新建一个Customer

Customer theCustomer = (Customer) os.CreateObject( typeof(Customer), "1" );

theCustomer.Name = "Karl";

//保存新增的Customer

os.UpdateAll();

如果需要用数据库保存持久化类,写法有点不同:

//建立Connection

string ConnectionString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=CustomerDemo;";

SqlConnection Connection = new SqlConnection(ConnectionString);

SqlDataAdapter theSqlDataAdapter = new SqlDataAdapter("select * from Customer",

Connection);

DataSet ds = new DataSet("Customer");

theSqlDataAdapter.Fill(ds, "Customer");

//建立一个DataSpace实例

DataSpace theDataSpace = new DataSpace("Map.xml", ds);

//从DataSpace取Name是"Karl" 的Customer.

Customer theCustomer = (Customer) theDataSpace.GetObject(typeof(Customer), "Name='Karl' ");

//修改Name

theCustomer.Name = "little karl";

以上简单的介绍了一下Hibernate、JDO和ObjectSpaces的使用,要想更加的深入理会,那要好好自己研究下了。

(下一章 《四、我的第一版O/R Mapping介绍》)

时间: 2024-08-31 00:05:41

三、现有的O/R Mapping产品介绍的相关文章

我的O/R Mapping实际开发经验之谈(二)

三.现有的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看下Hibernat

理解O/R Mapping

http://www.cnblogs.com/teddyma/archive/2010/08/01/1789714.html 本文的目的是以最精炼的语言,理解什么是O/R Mapping,为什么要O/R Mapping,和如何进行O/R Mapping. 什么是O/R Mapping? 广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换.狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口.理想情况下,基于这样一个面向对象的接口,

我的O/R Mapping实际开发经验之谈(一)

一.概述 O/R Mapping全称Object Relational Mapping,就是对象关系映射.把对表直接进行的操作,变成对持久化类的属性和方法的直接操作. 很多的项目是基于数据库的开发,程序中要大量进行表的增.删.改.查询的工作. 例如下面一段C#代码,从数据库CustomerDemo取表Customer数据: string ConnectionString = "data source=WILLIAM;persist security info=True;initial catal

呷哺呷哺餐厅一年三现活虫消费者称恶心想吐

中国经济网北京9月5日讯(记者 杨海洋)近期,两名消费者在北京海淀区畅春园食街2层"呷哺呷哺"的醋瓶中发现疑似蛆类的白色条状活物,虽然店方做出道歉并愿意赔偿相应损失,但 网友对此遭遇多表示感到恶心. 另有在呷哺呷哺遭遇"活虫"的消费者表示:"从中午到晚上我一直都没有食欲,根本就吃不下东西,真的是太恶心了",她希望呷哺呷哺火锅店能为此给出一个合理的解释.据中国经济网调查了解,一年左右时间仅在北京,呷哺呷哺餐厅就已三次被媒体曝出吃出活虫. 醋壶现白色

关于O/R Mapping的思考,我们应该选择什么?

最近对ORM方面的东西感兴趣,有一些想法,想和大家讨论一下. 我觉得Hibernate应算算是一个经典且功能强大的ORM框架. 它最大的有点是,你可以完全用面向对象分析与设计(OOAD)的思想来设计好所有的类,然后该框架就可以以非常人性化的方式为你获取对象或者持久化对象. 但同时我也发现它的一个缺点,就是当对象与对象之间的关系比较复杂的时候,ORM配置文件会很复杂,且比较难维护.并且当我们要对多个表进行关联查询时,虽然框架提供给了我们很多方便的接口让我们可以通过设置对象的属性的方式来告诉框架我们

[NHibernate]O/R Mapping基础

系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) 引言 对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的.这个映射文档被设计为易读的,并且拒绝恶意手工修改.映射语言以.NET为中心的,意味着映射是持久化类的定义来创建的,而非表的定义. 请注意,虽然很多Hibernate用户选择手工定义XML映射文档,也有一些工具来生成映射文档,包括XDo

.net下的几个O/R Mapping框架对比,数据实体的验证

几个.net的O/R框架 名称 URL Pros Cons Microsoft Entity Framework msdn 官方支持 可视化很好 发展时间相对短 NHibernate http://nhforge.com 开发支持,时间很长 比较复杂 Subsonic http://subsonicproject.com Active Record Auto-generate code Open Source, Not flexible Genome http://www.genom-e.com

实战 .Net 数据访问层 - 11

访问|数据 4. Data Access Logic 讨论Data Access Logic(为了不和Data Access Layer混淆,文中 所有涉及Data Access Logic的部分将全部使用全称描述,DAL仅指Data Access Layer)前,让我们先看一看它的结构示意图: 咦!怎么回事?看上去长得与DAF非常相似嘛!难道这就是作 者"不辞辛劳"单独开辟一个小节来进行"大肆宣传"的Data Access Logic吗? 没错!这就是Data A

剖析 .Net 下的数据访问层技术(三)

访问|数据 u O/R Mapping O/R Mapping的全称是:Object Relational Mapping,主要目的是在传统RDBMS与OO Language之间建映射关系,从而使开发人员彻底脱离数据持久这片剪不断理还乱的苦海. 关于O/R Mapping或者近来比较热门的O/X Mapping(大家可以参考"程序员,2004.01,P86"),可能需要专门的文章进行详细论述,本文的目的主要是对现有方案的优缺点进行简单剖析以及提供一些实践中的参考信息. 相比较J2EE平