初识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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql慢查询_mysql慢查询为什么要用

    mysql慢查询_mysql慢查询为什么要用1概念MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是记录运行10秒以上的语句。默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数。当然,如果…

    2022年10月15日
    5
  • fastjson对象转jsonobject_fastjson字符串转对象

    fastjson对象转jsonobject_fastjson字符串转对象引入阿里fostjson库dependencies{compile’com.alibaba:fastjson:1.2.23′}LoginBeen实体类packagecom.example.scxx.scbluetoothpay.been;importcom.alibaba.fastjson.annotation.JSONType;/***FileName:LoginBeen

    2026年1月14日
    8
  • 初中python培训机构

    初中python培训机构都知道现在Python这门编程语言很火,那它究竟火到什么程度?可能互联网上铺天盖地的Python学习贴不够直观,求职平台上Python相关工资水涨船高,也离我们普通人太远,但——Python被纳入基础教育体系呢?浙江省八年级将新增Python编程课程风变编程得到最新消息,在2020年9月开始的新学期中,浙江省三年级到九年级信息技术课将同步替换新教材,而其中最大的变化是,八年级将新增Python课程内容。同时,新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材规划

    2022年5月16日
    49
  • python做得怎么变成exe_Python如何生成exe文件?

    python做得怎么变成exe_Python如何生成exe文件?背景图来源:click斗鱼直播间真实rtmp地址获取(含工具类下载)​zhuanlan.zhihu.com最经典的Python爬虫(图片)案例​zhuanlan.zhihu.com写在前面:之前用python生成过可执行的exe文件(斗鱼推流地址exe,图片exe,芳儿小团子千人成像exe,批量string翻译等等),部分如上链接。今天又遇到:需将word里面的表格的数据提取出来,写入到exce…

    2022年5月4日
    54
  • 偏最小二乘法

    偏最小二乘法偏最小二乘回归是一种新型的多元统计数据分析方法,它与1983年由伍德和阿巴诺等人首次提出。近十年来,它在理论、方法和应用方面都得到了迅速的发展。密西根大学的弗耐尔教授称偏最小二乘回归为第二代回归分析方法。偏最小二乘回归方法在统计应用中的重要性主要的有以下几个方面:(1)偏最小二乘回归是一种多因变量对多自变量的回归建模方法。(2)偏最小二乘回归可以较好地解决许多以往用普通多元回归无法解决

    2022年5月16日
    42
  • web浏览器缓存机制_网站利用浏览器缓存

    web浏览器缓存机制_网站利用浏览器缓存浏览器缓存机制之一(经典缓存)因为在接手的项目中用到过比较新的HTML5应用缓存,也用到了经典的缓存如设置max-age,Etag之类,而之前一直就是在用着没有去深究其中原理。周末天气不好,懒得出去了,正好找时间总结下。1.关于浏览器缓存记得去年看《HTTP权威指南》的时候,有一章是专门讲浏览器缓存的,一年时间过得太快,逝去的时光还真是如同人群中消失的好姑娘,眼看她嫁给别人。我这里把浏览器缓存分为…

    2022年10月21日
    3

发表回复

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

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