Morphia一个nosql的ORM框架

Morphia是一个用于MongoDB的ORM框架,它提供了对MongoDB API的封装,类似于Hibernate。通过使用Morphia,开发者可以利用Java语言进行数据库操作,简化了与NoSQL数据库的交互。本文介绍了如何配置POJO进行注解、设计泛型DAO以及进行基本的测试。测试结果显示,Morphia在插入和查询数据方面表现出较好的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字: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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值