db4o对象型数据库学习笔记db4o(database for object ) 是一个开源的,面向对象的数据库.现在有很多的在传统
db4o对象型数据库学习笔记
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(); ??
- ?} ??
- } ??
1 楼 mewleo 2007-05-21 使用了对象数据库以后,真的不想使用DAO模式了,把本来
简单的持久操作复杂化了。最近写了一个框架OMM为了配合
Db4o的使用,把持久层封装到一件装备中,类似ejb的cmp,然后
给他在需要的时候穿上,呵呵,比ejb要简单许多。
对象,你喜欢极品装备吗?
http://www.iteye.com/topic/79536
实现DDD装备模型
http://www.iteye.com/topic/81086 2 楼 yatwql 2007-05-21 真的很好么? 有些以前用Visual Foxpro的感觉. 3 楼 icefire 2007-05-22 感觉确实爽!!
不过学习它还是得花上不少时间的!
不过上手很快! 4 楼 carlosbdw 2007-08-13 为什么不把所有代码都贴出来呢?编译都过不去