初识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(“Brian“, “Goetz“, 39);
20InBlock.gif            Person jason = new Person(“Jason“, “Hunter“, 35);
21InBlock.gif            Person clinton = new Person(“Brian“, “Sletten“, 38);
22InBlock.gif            Person david = new Person(“David“, “Geary“, 55);
23InBlock.gif            Person glenn = new Person(“Glenn“, “Vanderberg“, 40);
24InBlock.gif            Person neal = new Person(“Neal“, “Ford“, 39);
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(“Brian“, null, 0));
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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 利用CSkin组件设计漂亮的WinForm登录界面「建议收藏」

    利用CSkin组件设计漂亮的WinForm登录界面「建议收藏」众所周知,WinForm具有快速开发的优点,但是美观方面一直被人诟病,一般美化都是采用第三方的组件来满足美化效果,这里我也利用Cskin组件来设计一个具有一定美感的登录界面,CSkin下载CSkin的使用你可以自行查看下载后的文档或者另行百度,这里就不介绍了,关于CSkin的美化登录界面简单介绍,主要是利用背景图片结合CSkin界面和控件的效果来实现的,如果你中别人的登录界面,你也可以截取别人的登录界面,然后用自己的控件覆盖人家的登录输入位置,覆盖别人的logo或者系统名称等,这也是一种技巧。

    2022年5月27日
  • db4o基础一[通俗易懂]

    db4o基础一[通俗易懂]1.打开数据库IObjectContainerdb=Db4oFactory.OpenFile(YapFileName);\\’c:\db4obasic.yap’//IObjectConta

    2022年7月1日
  • linux切换java版本_java_home environment variable

    linux切换java版本_java_home environment variable© 版权声明:本文为博主原创文章,转载请注明出处本文根据官方文档加上自己的理解,仅供参考官方文档:https://docs.spring.io/spring-security/

    2022年8月4日
  • 404页面的制作教程「建议收藏」

    404页面的制作教程「建议收藏」近期发现很多让做SEO诊断的网站一些最基础的操作都没有做,比如首选域确定及301设置、robots.txt文件没有写、404页面没有制作及设置等。前面两项在网上信息最多,这次主要说下404页面的问题。404页面的作用是什么?404页面是为了在用户属于错误URL或网页文件被删除时提醒用户的页面,页面中可以设置网站导航、背景颜色或图片的普通网页。为的是用户没有访问到正常页面时可以…

    2022年7月27日
  • idea里面怎么查看自己的激活码(注册激活)2022.03.11

    (idea里面怎么查看自己的激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月13日
  • CreateThread 函数[通俗易懂]

    CreateThread 函数[通俗易懂]改变了栈的大小,但是把CreateThread的第2参数改成0x100000或者更小的时候,程序还是会出现这样的问题,只有将栈的大小还原为默认值,且CreateThread的第2参数为0才能正确运行详细的请查看:http://topic.csdn.net/u/20090905/15/7bf41679-3ed9-40b5-ac71-5f11c088984c.html微软在Windows

    2022年7月11日

发表回复

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

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