首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

db4o对象型数据库学习札记

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

  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. } ??
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   为什么不把所有代码都贴出来呢?编译都过不去

热点排行