0
点赞
收藏
分享

微信扫一扫

Morphia一个nosql的ORM框架

龙驹书房 2023-05-06 阅读 88


关键字:Morphia一个nosql的ORM框架


[color=red]官方API帮助文档及资料:http://code.google.com/p/morphia/w/list[/color];[color=red]http://api.mongodb.org/java/2.0/[/color]


近来在关注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][img][/img][img][/img]

举报

相关推荐

0 条评论