关键字:Morphia一个nosql的ORM框架
官方API帮助文档及资料:http://code.google.com/p/morphia/w/list;http://api./java/2.0/ 近来在关注nosql,看了一个用c++写的MongoDB的实现。感觉还不错,就是代码风格不太符合java的。无意间看到了Morphia这个东西。(http://code.google.com/p/morphia/)。发现对MongoDB的api进行了封装,类似hibernate。如果使用过hinernate再使用它会上手很快。想使用它依赖的jar包:mongo-2.3.jar,morphia-0.97.1.jar,proxytoys-1.0.jar,asm.jar,cglib-2.1.3.jar。 首先对POJO进行注解配置。例子如下: package domain; import com.google.code.morphia.annotations.Entity; import com.google.code.morphia.annotations.Id; @Entity public class Entry { @Id private String id; private String name; public Entry() { } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 编写dao层: package dao; import java.io.Serializable; import com.google.code.morphia.DAO; import com.google.code.morphia.Morphia; import com.mongodb.Mongo; import domain.Entry; public class EntryDAO extends DAO<Entry, Serializable> { public EntryDAO(Morphia morphia, Mongo mongo) { super(mongo, morphia, "entries"); } } 泛型DAO设计,经典。 做个测试: package test; import java.net.UnknownHostException; import java.util.List; import com.google.code.morphia.Morphia; import com.google.code.morphia.query.Query; import com.google.code.morphia.query.QueryResults; import com.mongodb.Mongo; import com.mongodb.MongoException; import dao.EntryDAO; import domain.Entry; public class MorphiaTest { public static void main(String[] args) throws UnknownHostException, MongoException { Mongo mongo = new Mongo(); Morphia morphia = new Morphia(); EntryDAO dao = new EntryDAO(morphia, mongo); /*for(int i=0;i<1000000;i++){ Entry entry = new Entry(); entry.setName("name"+i); dao.save(entry); }*/ QueryResults<Entry> res=dao.find(); Query<Entry> q = dao.createQuery(); List<Entry> list=q.field("name").equal("name1").asList(); for (Entry entry : list) { System.out.println(entry.getName()); } //System.out.println(res.countAll()); /*for (Entry e : res) { System.out.println(e.getId()+"---"+e.getName()); }*/ } } 一次插入100000条数据大概5s,1000000大概是2m,当然这是一个简单的测试。没有参考标准。 从1000000查出来一个name1的数据,用时3 750ms。 [img][/img] |
|
来自: CevenCheng > 《ORM》