欢迎光临
我们一直在努力

三、现有的O/R Mapping产品介绍-.NET教程,数据库应用

建站超值云服务器,限时71元/月

接上)

具体过程如下:

(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介绍》)

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 三、现有的O/R Mapping产品介绍-.NET教程,数据库应用
分享到: 更多 (0)