使用Morphia完成对象到MongoDB的映射

红薯 发布于 2010/08/24 15:45
阅读 3K+
收藏 6

Morphia是一个实现Java对象到MongoDB双向映射的类库。最近,James Williams在自己Blog上张贴了一篇相关的文章

尽管MongoDB已经有了Grails插件,但James似乎更偏爱Morphia:

有人可能会奇怪我为何不使用Grails插件。我使用Morphia是因为它符合传统的Java范式(paradigms),在完全使用Groovy技术开发时不必了解太多新内容。

随后James给出了一个简单的例子,展示了Morphia的使用。在此之前,请先安装MongoDBMongoDB Java驱动Morphia

首先是领域模型,跟JPA非常类似,采用是注解驱动的方式:

import com.google.code.morphia.annotations.*

@Entity
public class BlogEntry implements Comparable{
	@Id  private String id
	
	String title
	Date dateCreated = new Date()
	String content
	
	@Embedded
	List<comment> comments = [ ] 	 	  	
}

@Embedded  
public class Comment {  
    String name  
    Date dateCreated = new Date()  
    String content  
} 

以上代码创建了两个领域模型:BlogEntry和Comment,前者作为实体存在,有自己的生命周期;后者则是内嵌在实体之中,没有独立的生命周期。关于这些注解的详细含义,以及Morphia提供的其他注解,请参见其 官方文档

其次,实现DAO来保存它们。只需要简单的继承一下Morphia提供的DAO,就能很快地实现对领域类的CRUD。

import com.mongodb.Mongo
import com.google.code.morphia.*

public class EntryDAO extends DAO {
    public EntryDAO(Morphia morphia, Mongo mongo) {
       super(mongo,morphia, "entries")
    }
}

最后检验上述代码的功能:

import com.mongodb.*
import com.google.code.morphia.Morphia

mongo = new Mongo()
morphia = new Morphia()
dao = new EntryDAO(morphia, mongo)

entry = new BlogEntry()
entry.setTitle("Test Entry")
entry.setDateCreated(new Date())
entry.setContent("This is a test entry.")

comment = new Comment()
comment.setDateCreated(new Date())
comment.setContent("Test comment")

entry.comments = []
entry.comments.add(comment)

dao.save(entry)
entries = dao.find()
entries.each {
    println it.properties
}

非常自然,对Java开发者而言。有兴趣的话不妨尝试一下,关于文章的详细内容,请参见 原文
加载中
0
Hartwell
Hartwell
用了,感觉不错!
0
kakad
kakad
hello 大侠 请教一个问题 如果让你选择使用morphia 还是springdata 你使用哪个? 为什么? 或是还有别的选择? 就java而言
返回顶部
顶部