db4o对象型数据库学习札记
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种高效率的标准查询方式!
java 代码
- 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
简单的持久操作复杂化了。最近写了一个框架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
为什么不把所有代码都贴出来呢?编译都过不去