利用db4o简化对象存储

db4o是一款优秀的面向对象数据库,German Viscuso最近在DZone上发表了一篇介绍它的文章,该文可以视为是db4o在主要语言和框架中的一次巡演。

作为一个关注Groovy的站点,我们的兴趣当然是其中和Groovy相关的部分:“在Giffon框架中使用db4o”。在这一小节,作者向读者展示了Griffon的db4o插件。

在Griffon工程中安装db4o插件后,会产生两个文件:Db4oConfig.groovy,包含数据源的定义;BootstrapDb4o.groovy,类似Grails中的BootStrap.groovy。同时,对于控制器,会注入一个名为withDb4o的动态方法,让你可以访问com.db4o.ObjectContainer实例,通过该对象你可以对数据库进行操作。

简单的例子由3部分组成:

  • 领域类:
    class Person { 
        int id
        String name
        String lastname
    }
        
  • 在BootstrapDb4o.groovy中初始化数据:
    class BootstrapDb4o {
       def init = { db4o ->
          db4o.store(new Person(id: 1, name: "Danno"
                              , lastname: "Ferrin"))
          db4o.store(new Person(id: 2, name: "Andres"
                              , lastname: "Almiray"))
          db4o.store(new Person(id: 3, name: "James"
                              , lastname: "Williams"))
          db4o.store(new Person(id: 4, name: "Guillaume"
                              , lastname: "Laforge"))
          db4o.store(new Person(id: 5, name: "Jim"
                              , lastname: "Shingler"))
          db4o.store(new Person(id: 6, name: "Josh"
                              , lastname: "Reed"))
          db4o.store(new Person(id: 7, name: "Hamlet"
                              , lastname: "D'Arcy"))
       }
    
       def destroy = { db4o ->
       }
    }
    
  • 在控制器中查询数据代码:
    class SampleController {
       def model
    
       def onStartupEnd = { app ->
          withDb4o { db4o ->
             def tmpList = db4o.query(Person)
             edt { model.personsList.addAll(tmpList) }
          }
       }
    }
    

虽然Griffon中已经有了db4o插件,但遗憾地是Grails社区现在似乎并没有对应的东西,至少我在Grails官方网站的插件部分没有搜索到,google的结果也一样。有人曾表示想集成Grails和db4o,但那也是2008年的往事了。

此外,在Groovy社区还有另一个项目:db4o-groovy。该项目提供了:

  • Db4oBuilder:访问db4o数据库的Groovy DSL
  • Db4oGroovyShell和Db4oQueryGroovyShell:类似GrailsShell,对Groovy的标准Shell进行了扩展,提供了通过shell访问db4o数据库的功能。

关于该项目的详情,可以访问其官网和这篇Blog。

至于db4o在其他语言和框架中的应用,请访问DZone上的原文。你可以在其中找到在scala、servlet、android和Spring中使用它的例子。

你可能感兴趣的:(利用db4o简化对象存储)