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种高效率的标准查询方式!

     public class TestDb4o {  
       
     private static ObjectContainer db = null;  
     
       
     public static void main(String args[]){  
      openLocalDb();  
      System.out.println("--running--");  
      //queryForQBE(db);  
      //queryForSODA(db);  
      queryForNQ(db);  
      closeDb();  
      //openServer(1233,"admin","1");  
      //System.out.println("--running--");  
     }  
       
     public static void queryForNQ(ObjectContainer ocdb){  
      List list = db.query(  
           new Predicate() {  
            public boolean match(Car car) {  
             return car.getColor().equals("BLUE");  
            }  
           }  
           );  
      outPutList(list);  
     }  
       
     
     public static void queryForSODA(ObjectContainer ocdb){  
      Query q  = ocdb.query();  
        
      q.constrain(Car.class);  
      q.descend("name").constrain("宝马");  
      List l = q.execute();  
      outPutList(l);  
     }  
     
     /** 
      * QBE查询方式 : Query By Example 
      * @param ocdb 
      */ 
     public static void queryForQBE(ObjectContainer ocdb){  
      Car car = new Car();  
      car.setColor("BLUE");  
      List l = ocdb.get(car);  
      outPutList(l);  
     }  
       
     public static void outPutList(List list){  
      for(Iterator it=list.iterator();it.hasNext();){  
       Car c = (Car)it.next(); //5.0 才支持自动装箱  
       System.out.println(c);  
      }  
     }  
       
     /** 
      * 启动服务 
      * @param port 
      * @param userName 
      * @param password 
      */ 
     public static void openServer(int port,String userName,String password){  
      ObjectServer server=Db4o.openServer("D:/DB4O_TDB01.yap",port);  
      server.grantAccess(userName,password);  
      server.openClient();  
     }  
       
     /** 
      * 打开服务 
      * @param IPaddress 
      * @param userName 
      * @param password 
      * @param port 
      */ 
     public static void openClient(String IPaddress,String userName,String password,int port){  
      try {  
       db=Db4o.openClient(IPaddress,port,userName,password);  
      } catch (IOException e) {  
       e.printStackTrace();  
      }  
     }  
       
       
     /** 
      * 打开本地库 
      * 
      */ 
     public static void openLocalDb(){  
      db = Db4o.openFile("D:/DB4O_TDB01.yap");  
     }  
       
     /** 
      * 关闭库 
      * 
      */ 
     public static void closeDb(){  
      if(db!=null) db.close();  
     }  
    }