初识DB4O「建议收藏」

初识DB4O「建议收藏」   DB4O?   新出的OODBMS~取谐音DBforO。一个优秀的OODBMS解决方案,它出现的定位就是为了开发嵌入式和小型应用,同HSQLDB的定位相仿。不过DB4O的的优点则是,本身是OODBMS,那么对它的操作自然就是基于OO的,同Hiberante一样,但是Hiberante是ORM解决方案,而DB4O则是原生OODBMS方案。看看下面的例子一个同Hibernate相同的P…

大家好,又见面了,我是你们的朋友全栈君。    DB4O?

    新出的OODBMS~取谐音DB for O 。一个优秀的OODBMS解决方案,它出现的定位就是为了开发嵌入式和小型应用,同HSQLDB的定位相仿。不过DB4O的的优点则是,本身是OODBMS,那么对它的操作自然就是基于OO的,同Hiberante一样,但是Hiberante是ORM解决方案,而DB4O则是原生OODBMS方案。看看下面的例子

一个同Hibernate相同的POJO,没有任何方法,也没有跟DB4O有任何耦合。

 1
None.gif
package
 name.lgn.db4o.test.model;

 2
None.gif

 3
ExpandedBlockStart.gifContractedBlock.gif
public
 
class
 Person 
dot.gif
{

 4InBlock.gif
 5InBlock.gif    private String firstName;
 6InBlock.gif
 7InBlock.gif    private String lastName;
 8InBlock.gif
 9InBlock.gif    private int age;
10InBlock.gif
11ExpandedSubBlockStart.gifContractedSubBlock.gif    public Person(String firstName, String lastName, int age) dot.gif{

12InBlock.gif        this.firstName = firstName;
13InBlock.gif        this.lastName = lastName;
14InBlock.gif        this.age = age;
15ExpandedSubBlockEnd.gif    }

16InBlock.gif
17ExpandedSubBlockStart.gifContractedSubBlock.gif    public String getFirstName() dot.gif{

18InBlock.gif        return firstName;
19ExpandedSubBlockEnd.gif    }

20InBlock.gif
21ExpandedSubBlockStart.gifContractedSubBlock.gif    public void setFirstName(String value) dot.gif{

22InBlock.gif        firstName = value;
23ExpandedSubBlockEnd.gif    }

24InBlock.gif
25ExpandedSubBlockStart.gifContractedSubBlock.gif    public String getLastName() dot.gif{

26InBlock.gif        return lastName;
27ExpandedSubBlockEnd.gif    }

28InBlock.gif
29ExpandedSubBlockStart.gifContractedSubBlock.gif    public void setLastName(String value) dot.gif{

30InBlock.gif        lastName = value;
31ExpandedSubBlockEnd.gif    }

32InBlock.gif
33ExpandedSubBlockStart.gifContractedSubBlock.gif    public int getAge() dot.gif{

34InBlock.gif        return age;
35ExpandedSubBlockEnd.gif    }

36InBlock.gif
37ExpandedSubBlockStart.gifContractedSubBlock.gif    public void setAge(int value) dot.gif{

38InBlock.gif        age = value;
39ExpandedSubBlockEnd.gif    }

40InBlock.gif
41ExpandedBlockEnd.gif}



42
None.gif

在看,DB4O的解决方案:

 1
None.gif
package
 name.lgn.db4o.test;

 2
None.gif

 3
None.gif
import
 name.lgn.db4o.test.model.Person;

 4
None.gif

 5
None.gif
import
 org.junit.Test;

 6
None.gif

 7
None.gif
import
 com.db4o.Db4o;

 8
None.gif
import
 com.db4o.ObjectContainer;

 9
None.gif
import
 com.db4o.ObjectSet;

10
None.gif

11
ExpandedBlockStart.gifContractedBlock.gif
public
 
class
 TestDB4O 
dot.gif
{

12InBlock.gif
13InBlock.gif    @Test
14ExpandedSubBlockStart.gifContractedSubBlock.gif    public void testDB() dot.gif{

15InBlock.gif        ObjectContainer db = null;
16ExpandedSubBlockStart.gifContractedSubBlock.gif        try dot.gif{

17InBlock.gif            db = Db4o.openFile(persons.data);
18InBlock.gif
19InBlock.gif            Person brian = new Person(BrianGoetz39);
20InBlock.gif            Person jason = new Person(JasonHunter35);
21InBlock.gif            Person clinton = new Person(BrianSletten38);
22InBlock.gif            Person david = new Person(DavidGeary55);
23InBlock.gif            Person glenn = new Person(GlennVanderberg40);
24InBlock.gif            Person neal = new Person(NealFord39);
25InBlock.gif
26InBlock.gif            db.set(brian);
27InBlock.gif            db.set(jason);
28InBlock.gif            db.set(clinton);
29InBlock.gif            db.set(david);
30InBlock.gif            db.set(glenn);
31InBlock.gif            db.set(neal);
32InBlock.gif
33InBlock.gif            db.commit();
34InBlock.gif
35InBlock.gif            // Find all the Brians
36InBlock.gif            ObjectSet brians = db.get(new Person(Briannull0));
37InBlock.gif            while (brians.hasNext())
38InBlock.gif                System.out.println(brians.next());
39InBlock.gif
40ExpandedSubBlockStart.gifContractedSubBlock.gif        }
 catch (Exception e) dot.gif{

41InBlock.gif            e.printStackTrace();
42ExpandedSubBlockStart.gifContractedSubBlock.gif        }
 finally dot.gif{

43InBlock.gif            if (db != null)
44InBlock.gif                db.close();
45ExpandedSubBlockEnd.gif        }

46InBlock.gif
47ExpandedSubBlockEnd.gif    }

48ExpandedBlockEnd.gif}



49
None.gif

存入数据用db.set(…);取出数据用db.get(…),是不是非常亲切和简单?

    对于不需要使用大型DB,但又需要存储数据的时候不需要再用hibernate+hsqldb了,只需要使用DB4O,就全带了,又有简单的数据库操作,又有数据的存储,还有数据完整性的保证,简单方便,何乐不为呢?RCP开源项目著名的RSSOWL在2.0中也已经把原有的hiberante+hsqldb替换为DB4O的解决方案了。

    虽然OODBMS的路还有很长,而且就现在看,和RDBMS还有很长的距离,但是从DB4O上,我们还是看到了希望。在DB4O的眼中Hibernate,jdo等等都是暂时的解决方案,对于OODBMS来说ORM本来就是不存在的东西,ORM仅仅是为了解决RDBMS到OO的映射,而OODBMS本来就是原生的,免去了中间层,免去了烦恼。

下载 db4o:这是一种用于 Java 的开源对象数据库。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162593.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月21日 下午4:16
下一篇 2022年7月21日 下午4:36


相关推荐

  • wifi2.4频段怎么设置_怎么修改wifi频段

    wifi2.4频段怎么设置_怎么修改wifi频段在win10系统里,wifi一般会优先选择2.4g频段,一些公共wifi大家都挤在2.4g频段的话,会导致网络质量很大的下降,所以我们可以把wifi改成5hz首选频带,那么win10怎样将wifi变为支持5ghz频段呢,下面小编给大家分享win10将wifi改成5hz首选频带的方法。解决方法:1、点击win10操作系统上的开始菜单图标,在弹出的菜单中,点击设置。2、弹出设置窗口,在设置窗口界面中点…

    2022年10月20日
    6
  • 声源定位系统设计(一)——MVDR波束形成算法「建议收藏」

    声源定位系统设计(一)——MVDR波束形成算法「建议收藏」本篇博客希望通过通俗的方式讲清一些简单经典声源定位的方法,并能够按照这种方法自制一个声源定位系统。

    2026年2月16日
    3
  • 深入理解加密、解密、数字签名(签名证书、加密证书)的组成和数字证书

    深入理解加密、解密、数字签名(签名证书、加密证书)的组成和数字证书深入理解加密 解密 数字签名和数字证书 nbsp nbsp 随着电子商务的迅速发展 信息安全已成为焦点问题之一 尤其是网上支付和网络银行对信息安全的要求显得更为突出 为了能在因特网上开展安全的电子商务活动 公开密钥基础设施 PKI PublicKeyInf 逐步在国内外得到广泛应用 我们是否真的需要 PKI PKI 究竟有什么用 下面通过一个案例一步步地来剖析这个问题

    2026年3月17日
    2
  • ClickHouse函数整理(详细)

    ClickHouse函数整理(详细)无标题 md1 日期类函数 nbsp nbsp 1 1 时间或日期截取函数 to 返回非日期函数用途举例结果 toYear 取日期或时间日期的年份 toYear toDateTime 2018 12 1111 12 13 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp

    2025年11月12日
    4
  • rpm安装python[通俗易懂]

    rpm安装python[通俗易懂]由于python版本不匹配,所以需要重新安装python,但是通过源码编译在make的时候会有很多依赖项的问题(具体见http://www.linuxdiyf.com/viewarticle.php?id=55587),尝试了很久无法解决,无意中发现下面的方法,最终安装成功。wget http://mirrors.ircam.fr/pub/ius/stable/Redhat/5/x

    2022年6月5日
    131
  • tof相机很好的总结~

    tof相机很好的总结~1.1TOF初探TOF是Timeofflight的简写,直译为飞行时间的意思。所谓飞行时间法3D成像,是通过给目标连续发送光脉冲,然后用传感器接收从物体返回的光,通过探测光脉冲的飞行(往返)时间来得到目标物距离。这种技术跟3D激光传感器原理基本类似,只不过3D激光传感器是逐点扫描,而TOF相机则是同时得到整幅图像的深度信息。TOF相机与普通机器视觉成像过程也有类似之处,都是由光源、光

    2022年5月9日
    57

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号