- 浏览: 65494 次
- 性别:
- 来自: 广东广州
最新评论
-
lishuai_girl:
看不到源代码啊!?
使用Protege、Jess API在ontology中进行简单推理 -
qinliyi123:
我也在测试spring和hibernate search的结合 ...
初试Hibernate Search -
billgmh:
test_root 写道如果我的数据库英字符集的,中文内容保存 ...
初试Hibernate Search -
test_root:
如果我的数据库英字符集的,中文内容保存后都是乱码,
我该如何实 ...
初试Hibernate Search -
test_root:
请问用hibernate search后,如何实现分页?
能把 ...
初试Hibernate Search
前言
在 db4o 之旅 系列文章的第一部分:初识 db4o 中,作者介绍了 db4o 的历史和现状,应用领域,以及和 ORM 等的比较。在这篇文章中,作者将会介绍 db4o 的安装、启动以及三种不同的查询方式:QBE(Query by Example)、SODA(Simple Object Database Access) 以及 NQ(Native Queries),并分别通过这三种不同的途径实现了两个关联对象的查询。本文还示范了开发中最经常用到的几个典型功能的 db4o 实现。
下载和安装 db4o
db4o 所有最新的版本都可以直接在官方网站上下载,进入 db4o 的下载页面,我们可以看到最新的 for Java 稳定版本是 5.5,包括 JAR、源代码、入门文档、API 等内容的完整的打包文件只有 6 MB,db4o 还有一个对象数据库管理工具 ObjectManager,目前版本是 1.8(请在参考资源中下载)。
接着在 Eclipse 中新建 Java 项目,把 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");
清单1. People 对象
- package bo;
- public class People {
- private java.lang.Integer _id;
- private java.lang.String _name;
- private java.lang.String _address;
- private java.util.List<autoinfo></autoinfo> _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<autoinfo></autoinfo> getAutoInfoList() {
- return this._autoInfoList;
- }
- public void addAutoInfo(AutoInfo _autoInfoList) {
- if (null == this._autoInfoList)
- this._autoInfoList = new java.util.ArrayList<autoinfo></autoinfo>();
- this._autoInfoList.add(_autoInfoList);
- }
- }
AutoInfo 对象清单2:
清单2. AutoInfo 对象
- package bo;
- public class AutoInfo{
- private java.lang.Integer _id;
- private java.lang.String _licensePlate;
- private bo.People _ownerNo;
- public java.lang.Integer getId () {
- return _id;
- }
- public void setId (java.lang.Integer _id) {
- this._id = _id;
- }
- public java.lang.String getLicensePlate () {
- return _licensePlate;
- }
- public void setLicensePlate (java.lang.String _licensePlate) {
- this._licensePlate = _licensePlate;
- }
- public bo.People getOwnerNo () {
- return this._ownerNo;
- }
- public void setOwnerNo (bo.People _ownerNo) {
- this._ownerNo = _ownerNo;
- }
- }
- package com;
- import bo.AutoInfo;
- import bo.People;
- import com.db4o.Db4o;
- import com.db4o.ObjectContainer;
- public class DB4OTest{
- public static void main(String[] args){
- //打开数据库
- ObjectContainer db = Db4o.openFile("auto.yap");
- try{
- //构造 People 对象
- People peo = new People();
- peo.setId(1);
- peo.setAddress("成都市");
- peo.setName("张三");
- //构造 AutoInfo 对象
- AutoInfo ai = new AutoInfo();
- ai.setId(1);
- ai.setLicensePlate("川A00000");
- //设置 People 和 AutoInfo 的关系
- ai.setOwnerNo(peo);
- peo.addAutoInfo(ai);
- //保存对象
- db.set(peo);
- }finally{
- //关闭连接
- db.close();
- }
- }
- }
图1. 对象数据库管理工具
图2. 对象结构
- package com;
- import java.util.List;
- import bo.AutoInfo;
- import com.db4o.Db4o;
- import com.db4o.ObjectContainer;
- public class DB4OTest{
- public static void main(String[] args){
- //打开数据库
- ObjectContainer db = Db4o.openFile("auto.yap");
- try{
- //构造模板对象
- AutoInfo ai = new AutoInfo();
- ai.setLicensePlate("川A00000");
- //查询对象
- List<autoinfo></autoinfo> list = db.get(ai);
- for(int x = 0; x < list.size(); x++){
- System.out.println("车主姓名:"+list.get(x).getOwnerNo().getName());
- }
- }finally{
- //关闭连接
- db.close();
- }
- }
- }
- package com;
- import java.util.List;
- import bo.AutoInfo;
- import com.db4o.Db4o;
- import com.db4o.ObjectContainer;
- import com.db4o.query.Query;
- public class DB4OTest{
- public static void main(String[] args){
- //打开数据库
- ObjectContainer db = Db4o.openFile("auto.yap");
- try{
- //构造查询对象
- Query query=db.query();
- //设置被约束实例
- query.constrain(AutoInfo.class);
- //设置被约束实例的字段和约束条件
- query.descend("_licensePlate").constrain("川A00000");
- //查询对象
- List<autoinfo></autoinfo> list = query.execute();
- for(int x = 0; x < list.size(); x++){
- System.out.println("车主姓名:"+list.get(x).getOwnerNo().getName());
- }
- }finally{
- //关闭连接
- db.close();
- }
- }
- }
- package com;
- import java.util.List;
- import bo.AutoInfo;
- import com.db4o.Db4o;
- import com.db4o.ObjectContainer;
- import com.db4o.query.Predicate;
- public class DB4OTest{
- public static void main(String[] args){
- //打开数据库
- ObjectContainer db = Db4o.openFile("auto.yap");
- try{
- List <autoinfo></autoinfo> list = db.query(new Predicate<autoinfo></autoinfo>() {
- public boolean match(AutoInfo ai) {
- //这样才是类型安全的
- return ai.getLicensePlate().equals("川A00000");
- }
- });
- for(int x = 0; x < list.size(); x++){
- System.out.println(list.get(x).getOwnerNo().getName());
- }
- }finally{
- //关闭连接
- db.close();
- }
- }
- }
- package com;
- import java.util.List;
- import bo.AutoInfo;
- import com.db4o.Db4o;
- import com.db4o.ObjectContainer;
- import com.db4o.query.Predicate;
- public class DB4OTest{
- public static void main(String[] args){
- //打开数据库
- ObjectContainer db = Db4o.openFile("auto.yap");
- try{
- List<autoinfo></autoinfo> list = db.query(new Predicate<autoinfo></autoinfo>() {
- public boolean match(AutoInfo ai) {
- return true;
- }
- });
- //记录总数
- Integer count = list.size();
- //每页两条,分三页
- for(int x = 0; x < 3; x++){
- System.out.println("第"+x+"页:"+list.get(x*2).getLicensePlate());
- System.out.println("第"+x+"页:"+list.get(x*2+1).getLicensePlate());
- }
- }finally{
- //关闭连接
- db.close();
- }
- }
- }
发表评论
-
Hibernate程序性能优化 [转载]
2008-07-15 14:14 945本文依照HIBERNATE帮助文 ... -
Struts应用转移到Struts2 [转载]
2008-07-10 11:58 1276翻译:SpringSide团队 转载请注明出处。有很多人都 ... -
如何提高hibernate性能 [转载]
2008-06-27 10:02 2271在一个拥有单独业务层的应用中,业务层必须在返回之前,为w ... -
开源面向对象数据库db4o之旅(3): 深入db4o
2007-05-16 19:32 1778前言 在开源面向对象数据库 db4o 之旅 系列文章的第 1 ... -
开源面向对象数据库db4o之旅(1):初识db4o
2007-05-16 18:49 1927前言 业界对持久存储领域的追求从未停止过,为了更方便、更容易地 ...
相关推荐
2.介绍了面向对象数据库 db4o 的安装、启动以及三种查询语言,并对三种查询语言做了比较。 3.介绍面向对象数据库 db4o 的修改和删除,并对其中出现的问题进行细致分析,引入了“更新深度(update depth)”这一重要...
2. **查询API**:db4o提供了一种基于对象的查询语言OQL(Object Query Language),类似于SQL但更贴近面向对象编程。通过OQL,可以直接查询对象的属性和关系。 3. **事件驱动**:db4o支持对象生命周期事件,如对象...
DB4O面向对象数据库使用指南
- **db4o**:db4o是一款专为Java、.NET和Mono平台设计的开源面向对象数据库系统。它提供了高效的数据存储和检索功能,支持多种数据类型,并且能够直接存储复杂的对象结构而无需进行序列化或反序列化的操作。 - **...
纯对象数据库db4o的开发API,可以方便用户在进行开发的时候查阅。
Android开源数据库框架db4o是一个强大的对象数据库管理系统,专为Java和.NET平台设计,但在Android环境中也有广泛的应用。db4o提供了一种直接在内存或磁盘上存储对象的方式,无需传统的关系型数据库映射,这使得开发...
db4o 是一个开源的面向对象数据库,能够轻松地将 Java 对象持久化到数据库中。本文将详细介绍 db4o 的安装、启动、查询方式、对象持久化、数据库文件结构、主要包结构等知识点。 一、db4o 安装和启动 db4o 的安装...
2. **查询对象**:db4o支持查询对象,类似于Java中的`query-by-example`。你可以创建一个对象实例,设置你想要匹配的属性,然后让db4o找出所有匹配的对象。 3. **版本控制**:db4o可以跟踪对象的历史版本,允许你在...
DB4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者将Java或.NET平台上的对象直接存储到数据库中,而无需进行SQL映射。在本文中,我们将深入探讨如何利用DB4o将一个对象保存到文件中,然后进行...
- **查询策略调整**:db4o支持谓词查询、查询配置(query configuration)和查询计划(query planner)。根据应用场景调整这些策略,可以显著提升查询效率。 - **激活深度控制**:通过设置激活深度,可以减少不必要...
Db4o是一个面向对象的数据库系统,由db4objects公司开发,它支持Java和.NET平台,并采用双授权模式,即GPLv2和商业授权。在Android开发中,Db4o提供了一种替代传统关系型数据库如SQLite的方式,尤其是在面对面向对象...
DB4o(Database for Objects)是一款开源的对象数据库系统,它允许开发者直接将对象持久化到数据库中,无需进行额外的映射或者数据访问层(DAL)的开发。这个数据库系统设计的目标是简化对象关系映射(ORM)的过程,...
《db4o 权威指南》是一本深入探讨db4o这一开源面向对象数据库系统的专业书籍,对于Java开发者来说尤其有价值。db4o是Database for Objects的缩写,它允许开发者以自然、直观的方式存储和检索Java对象,无需编写SQL...
Db4o,全称为“Database for Objects”,是一个开源的对象数据库管理系统,主要应用于Java和.NET平台。这个项目专注于提供一种简单的方式来存储和检索Java对象,无需SQL或其他中间映射层。在“Db4o的简单操作项目”...
1. **性能优化**:db4o 8.0对查询引擎进行了优化,提高了查询速度和整体性能,尤其在大数据量的场景下表现更佳。 2. **事务支持**:提供了更强大的事务管理,确保数据的一致性和完整性,支持ACID(原子性、一致性、...
**db4o(Database for Objects)** 是一个开源的对象数据库管理系统(Object-Relational Mapping,ORM),它允许开发者直接在Java或.NET平台上存储和检索Java对象或.NET对象,无需进行SQL查询或者映射过程。db4o的...
db4o(Database for Objects)是一种开源的对象数据库管理系统(Object-Relational Mapping, ORM),它允许开发者直接将Java对象持久化到数据库中,无需传统的SQL语句。这个数据库系统的核心理念是“存储对象,而非...