DB4O?
新出的OODBMS~取諧音DB for O 。一個(gè)優(yōu)秀的OODBMS解決方案,它出現(xiàn)的定位就是為了開(kāi)發(fā)嵌入式和小型應(yīng)用,同HSQLDB的定位相仿。不過(guò)DB4O的的優(yōu)點(diǎn)則是,本身是 OODBMS,那么對(duì)它的操作自然就是基于OO的,同Hiberante一樣,但是Hiberante是ORM解決方案,而DB4O則是原生OODBMS 方案??纯聪旅娴睦?br>
一個(gè)同Hibernate相同的POJO,沒(méi)有任何方法,也沒(méi)有跟DB4O有任何耦合。
1package name.lgn.db4o.test.model;
2
3public class Person {
4
5 private String firstName;
6
7 private String lastName;
8
9 private int age;
10
11 public Person(String firstName, String lastName, int age) {
12 this.firstName = firstName;
13 this.lastName = lastName;
14 this.age = age;
15 }
16
17 public String getFirstName() {
18 return firstName;
19 }
20
21 public void setFirstName(String value) {
22 firstName = value;
23 }
24
25 public String getLastName() {
26 return lastName;
27 }
28
29 public void setLastName(String value) {
30 lastName = value;
31 }
32
33 public int getAge() {
34 return age;
35 }
36
37 public void setAge(int value) {
38 age = value;
39 }
40
41}
42 在看,DB4O的解決方案:
1package name.lgn.db4o.test;
2
3import name.lgn.db4o.test.model.Person;
4
5import org.junit.Test;
6
7import com.db4o.Db4o;
8import com.db4o.ObjectContainer;
9import com.db4o.ObjectSet;
10
11public class TestDB4O {
12
13 @Test
14 public void testDB() {
15 ObjectContainer db = null;
16 try {
17 db = Db4o.openFile("persons.data");
18
19 Person brian = new Person("Brian", "Goetz", 39);
20 Person jason = new Person("Jason", "Hunter", 35);
21 Person clinton = new Person("Brian", "Sletten", 38);
22 Person david = new Person("David", "Geary", 55);
23 Person glenn = new Person("Glenn", "Vanderberg", 40);
24 Person neal = new Person("Neal", "Ford", 39);
25
26 db.set(brian);
27 db.set(jason);
28 db.set(clinton);
29 db.set(david);
30 db.set(glenn);
31 db.set(neal);
32
33 db.commit();
34
35 // Find all the Brians
36 ObjectSet brians = db.get(new Person("Brian", null, 0));
37 while (brians.hasNext())
38 System.out.println(brians.next());
39
40 } catch (Exception e) {
41 e.printStackTrace();
42 } finally {
43 if (db != null)
44 db.close();
45 }
46
47 }
48}
49 存入數(shù)據(jù)用db.set(...);取出數(shù)據(jù)用db.get(...),是不是非常親切和簡(jiǎn)單?
對(duì)于不需要使用大型DB,但又需要存儲(chǔ)數(shù)據(jù)的時(shí)候不需要再用hibernate+hsqldb了,只需要使用DB4O,就全帶了,又有簡(jiǎn)單的數(shù)據(jù)庫(kù)操作, 又有數(shù)據(jù)的存儲(chǔ),還有數(shù)據(jù)完整性的保證,簡(jiǎn)單方便,何樂(lè)不為呢?RCP開(kāi)源項(xiàng)目著名的RSSOWL在2.0中也已經(jīng)把原有的hiberante+ hsqldb替換為DB4O的解決方案了。
雖然OODBMS的路還有很長(zhǎng),而且就現(xiàn)在看,和RDBMS還有很長(zhǎng)的距離,但是從DB4O上,我們還是看到了希望。在DB4O的眼中 Hibernate,jdo等等都是暫時(shí)的解決方案,對(duì)于OODBMS來(lái)說(shuō)ORM本來(lái)就是不存在的東西,ORM僅僅是為了解決RDBMS到OO的映射,而 OODBMS本來(lái)就是原生的,免去了中間層,免去了煩惱。
下載 db4o:這是一種用于 Java 的開(kāi)源對(duì)象數(shù)據(jù)庫(kù)。