论坛首页 Java企业应用论坛

db4o对象型数据库学习笔记

浏览 6889 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-29  
DAO

db4o(database for object ) 是一个开源的,面向对象的数据库.

现在有很多的在传统数据库上建立持久关系和ORM影射的工具.

对于ORM,有很多中说法:

"业界对持久存储领域的追求从未停止过,为了更方便、更容易地用对象表达我们的思维,开源领域和商业领域都涌现了许多新技术, ORM 的出现恰恰说明了这点。最近一年,业界也在反思,到底 ORM 给我们带来的是便利还是麻烦。矛头指向大名鼎鼎的 Hibernate ,纷纷议论其性能问题,大家似乎要达成这样的共识:“在业务逻辑复杂的地方用 SP ,而一般的 CRUD 还是 Hibernate ”,就连全球知名的 BearingPoint 也有类似看法。"

呵呵,db4o 确实一个新的直接应用了orm的数据库...

花了半天时间,终于把最基本的应用搞懂了,最兴奋的莫过于:他不但支持 本地访问,还支持网络访问,嵌入式开发.

而且是开源的,免费的.for JDKV1.4的总大小只有600多k,呵呵正好应用于我想搞的一个手机软件上,哈哈~~~

不多说了,学习笔记记下来:

1-  数据库下载地址: www.db4o.com 这个是官方网站,上去找最新的版本吧

2-  object manager:对象管理器,这个是数据库管理的UI工具,也在 www.db4o.com 里有下载,有两种版本的

3-  经过测试 db4o的效率比普通的 ORM工具要高出很多:

"db4o 官方公布的基准测试数据,db4o 比采用 Hibernate/MySQL 方案在某些测试线路上速度高出 44 倍之多!并且安装简单,仅仅需要 400Kb 左右的 .jar 或 .dll 库文件。"

下面还是给出最简单的测试学习代码:

呵呵,非常简单的,而且支持3种高效率的标准查询方式!

java 代码
  1. public class TestDb4o {   
  2.     
  3.  private static ObjectContainer db = null;   
  4.   
  5.     
  6.  public static void main(String args[]){   
  7.   openLocalDb();   
  8.   System.out.println("--running--");   
  9.   //queryForQBE(db);   
  10.   //queryForSODA(db);   
  11.   queryForNQ(db);   
  12.   closeDb();   
  13.   //openServer(1233,"admin","1");   
  14.   //System.out.println("--running--");   
  15.  }   
  16.     
  17.  public static void queryForNQ(ObjectContainer ocdb){   
  18.   List list = db.query(   
  19.        new Predicate() {   
  20.         public boolean match(Car car) {   
  21.          return car.getColor().equals("BLUE");   
  22.         }   
  23.        }   
  24.        );   
  25.   outPutList(list);   
  26.  }   
  27.     
  28.   
  29.  public static void queryForSODA(ObjectContainer ocdb){   
  30.   Query q  = ocdb.query();   
  31.      
  32.   q.constrain(Car.class);   
  33.   q.descend("name").constrain("宝马");   
  34.   List l = q.execute();   
  35.   outPutList(l);   
  36.  }   
  37.   
  38.  /**  
  39.   * QBE查询方式 : Query By Example  
  40.   * @param ocdb  
  41.   */  
  42.  public static void queryForQBE(ObjectContainer ocdb){   
  43.   Car car = new Car();   
  44.   car.setColor("BLUE");   
  45.   List l = ocdb.get(car);   
  46.   outPutList(l);   
  47.  }   
  48.     
  49.  public static void outPutList(List list){   
  50.   for(Iterator it=list.iterator();it.hasNext();){   
  51.    Car c = (Car)it.next(); //5.0 才支持自动装箱   
  52.    System.out.println(c);   
  53.   }   
  54.  }   
  55.     
  56.  /**  
  57.   * 启动服务  
  58.   * @param port  
  59.   * @param userName  
  60.   * @param password  
  61.   */  
  62.  public static void openServer(int port,String userName,String password){   
  63.   ObjectServer server=Db4o.openServer("D:/DB4O_TDB01.yap",port);   
  64.   server.grantAccess(userName,password);   
  65.   server.openClient();   
  66.  }   
  67.     
  68.  /**  
  69.   * 打开服务  
  70.   * @param IPaddress  
  71.   * @param userName  
  72.   * @param password  
  73.   * @param port  
  74.   */  
  75.  public static void openClient(String IPaddress,String userName,String password,int port){   
  76.   try {   
  77.    db=Db4o.openClient(IPaddress,port,userName,password);   
  78.   } catch (IOException e) {   
  79.    e.printStackTrace();   
  80.   }   
  81.  }   
  82.     
  83.     
  84.  /**  
  85.   * 打开本地库  
  86.   *  
  87.   */  
  88.  public static void openLocalDb(){   
  89.   db = Db4o.openFile("D:/DB4O_TDB01.yap");   
  90.  }   
  91.     
  92.  /**  
  93.   * 关闭库  
  94.   *  
  95.   */  
  96.  public static void closeDb(){   
  97.   if(db!=null) db.close();   
  98.  }   
  99. }   
   发表时间:2007-05-21  
使用了对象数据库以后,真的不想使用DAO模式了,把本来
简单的持久操作复杂化了。最近写了一个框架OMM为了配合
Db4o的使用,把持久层封装到一件装备中,类似ejb的cmp,然后
给他在需要的时候穿上,呵呵,比ejb要简单许多。

对象,你喜欢极品装备吗?
http://www.iteye.com/topic/79536
实现DDD装备模型
http://www.iteye.com/topic/81086
0 请登录后投票
   发表时间:2007-05-21  
真的很好么? 有些以前用Visual Foxpro的感觉.
0 请登录后投票
   发表时间:2007-05-22  
感觉确实爽!!
不过学习它还是得花上不少时间的!
不过上手很快!
0 请登录后投票
   发表时间:2007-08-13  
为什么不把所有代码都贴出来呢?编译都过不去
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics