Chinaunix首页 | 论坛 | 博客
  • 博客访问: 753642
  • 博文数量: 771
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-11 14:24
文章分类

全部博文(771)

文章存档

2011年(1)

2008年(770)

我的朋友

分类:

2008-09-11 14:30:12

2006 年 11 月 20 日

    这篇文章是 开源面向对象数据库 db4o 之旅 系列文章的第二篇,介绍了面向对象数据库 db4o 的安装、启动以及三种查询语言,并对三种查询语言做了比较。

     在 开源面向对象数据库 db4o 之旅 系列文章的第一部分:初识 db4o 中,作者介绍了 db4o 的历史和现状,应用领域,以及和 ORM 等的比较。在这篇文章中,作者将会介绍 db4o 的安装、启动以及三种不同的查询方式:QBE(Query by Example)、SODA(Simple Object Database Access) 以及 NQ(Native Queries),并分别通过这三种不同的途径实现了两个关联对象的查询。本文还示范了开发中最经常用到的几个典型功能的 db4o 实现。

和安装 db4o

     db4o 所有最新的版本都可以直接在官方网站上,进入 db4o 的页面,我们可以看到最新的 for 稳定版本是 5.5,包括 JAR、源代码、入门文档、API 等内容的完整的打包文件只有 6 MB,db4o 还有一个对象数据库管理工具 ObjectManager,目前版本是 1.8(请在参考资源中下载)。

    接着在 Eclipse 中新建 项目,把 db4o 对象数据库引擎包 db4o-5.5-java5.jar 导入进项目。由于 db4o 支持多种版本的 JDK,除了 for JDK 5.0 的 db4o-5.5-java5.jar 外,还有 for JDK 1.1、1.2-1.4 的 JAR 包,以适应多种环境。与 Hibernate、iBATIS SQL Maps 相比,db4o 更加自然,无需过多地引用第三方支持库。

    db4o 怎样进行对象持久化呢?通过浏览目录可以发现,与传统的 RDBMS 一样,db4o 也有自己的数据库文件, 在 db4o 中数据库文件的后缀名是“*.yap”。让我们先来了解一下 db4o 对象数据库引擎的主要包结构:

  • com.db4o
    com.db4o 包含了使用 db4o 时最经常用到的功能。两个最重要的接口是 com.db4o.Db4o 和 com.db4o.ObjectContainer。com.db4o.Db4o 工厂是运行 db4o 的起点,这个类中的静态方法可以开启数据库文件、启动或连接一个已经存在的,还可以在开启数据库之前进行 db4o 环境配置。com.db4o.ObjectContainer 接口很重要,开发过程中 99% 的时间都会用到它,ObjectContainer 可在单用户模式下作为数据库实例,也可作为 db4o 服务器的客户端。每个 ObjectContainer 实例都有自己的事务。所有的操作都有事务保证。当打开 ObjectContainer,就已经进入事务了,commit() 或 rollback() 时,下一个事务立即启动。每个 ObjectContainer 实例维护它自己所管理的已和已实例化对象,在需要 ObjectContainer 的时候,它会一直保持开启状态,一旦关闭,内存中数据库所引用的对象将被丢弃。
  • com.db4o.ext
    你也许想知道为什么在 ObjectContainer 中只能看见很少的方法,原因如下:db4o 接口提供了两个途径,分别在 com.db4o 和 com.db4o.ext 包中。这样做首先是为了让开发者能快速上手;其次为了让其他产品能更容易的复制基本的 db4o 接口;开发者从这一点上也能看出 db4o 是相当轻量级的。每个 com.db4o.ObjectContainer 对象也是 com.db4o.ext.ExtObjectContainer 对象。可以转换成 ExtObjectContainer 获得更多高级特性。
  • com.db4o.config
    com.db4o.config 包含了所有配置 db4o 所需的类。
  • com.db4o.query
    com.db4o.query 包包含了构造“原生查询, NQ(Native Queries)”所需的 Predicate 类。NQ 是 db4o 最主要的查询接口。

    db4o 提供两种运行模式,分别是本地模式和服务器模式。本地模式是指直接在程序里打开 db4o 数据库文件进行操作:

ObjectContainer db = Db4o.openFile("auto.yap");

而服务器模式则是客户端通过 IP 地址、端口以及授权口令来访问服务器:

服务器端:

ObjectServer server=Db4o.openServer("auto.yap",1212);
server.grantAccess("admin","123456");

客户端:
ObjectContainer db=Db4o.openClient("192.168.0.10",1212,"admin","123456");

    两种方式都可以得到 ObjectContainer 实例,就目前 Java EE 应用环境来看,服务器模式更有现实意义;而本地模式更适合于应用。为了简化演示,本文在下面的例子都将采用本地模式。

在下面的例子里,我们都会用到下面两个对象: People 和 AutoInfo 对象。

People 对象清单1:



				
package bo;

public class People {

	private java.lang.Integer _id;
	private java.lang.String _name;
	private java.lang.String _address;
	private java.util.List _autoInfoList;

	public java.lang.Integer getId() {
		return _id;
	}

	public void setId(java.lang.Integer _id) {
		this._id = _id;
	}

	public java.lang.String getName() {
		return _name;
	}

	public void setName(java.lang.String _name) {
		this._name = _name;
	}

	public java.lang.String getAddress() {
		return _address;
	}

	public void setAddress(java.lang.String _address) {
		this._address = _address;
	}

	public java.util.List getAutoInfoList() {
		return this._autoInfoList;
	}

	public void addAutoInfo(AutoInfo _autoInfoList) {
		if (null == this._autoInfoList)
			this._autoInfoList = new java.util.ArrayList();
		this._autoInfoList.add(_autoInfoList);
	}

}

[1]     

【责编:Peng】

--------------------next---------------------

阅读(489) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~