Create a Morphia instance(创建一个Morphia实例)
首先你要做的就是创建一个Morphia实例,并且告诉他你要映射的类。建议你仅创建一次Morphia实例,重复使用。映射的任何一个类都将会进行验证,如果由于某些原因你映射的类不合法将会抛出一个MappingException异常
import com.google.code.morphia.Morphia;
...
Morphia morphia = new Morphia();
morphia.map(BlogEntry.class)
.map(Author.class);
...
指定Morphia去扫描一个包,映射包中的所有类。
morphia.mapPackage("my.package.with.only.mongo.entities");
Mapping a java for Persistence
保存一个实例对象到Mongo数据库中的一个容器中。调用Morphia中的toDBObject()方法,把java对象传入。
我们可以把返回的DBObject对象直接保存到Mongo中。
// map the blog entry to a Mongo DBObject
DBObject blogEntryDbObj = morphia.toDBObject(blogEntry);
// and then save that DBObject in a Mongo collection
db.getCollection("BlogEntries").save(blogEntryDbObj);
Retrieving a java from MongoDB(从Mongo中回复一个Java对象)
从Mongo数据库中的一个文档创建一个Java对象。调用Morphia中的fromDBObject()方法即可,传入要返回的DBObject对象。
// load the DBObject from a Mongo collection
BasicDBObject blogEntryDbObj = (BasicDBObject) db.getCollection("BlogEntries")
.findOne(new BasicDBObject("_id", new ObjectId(blogEntryId));
// and then map it to our BlogEntry object
BlogEntry blogEntry = morphia.fromDBObject(BlogEntry.class, blogEntryDbObj);
使用Morphia管理Mongdo中的Java对象的非常清楚的方法是使用DAO 支持。DAO包含了操作Mongo和Morphia的抽象方法,所以业务逻辑不用依赖Morphia。Morphia morphia = new Morphia();
morphia.map(Circle.class)
.map(Rectangle.class)
.map(ShapeShifter.class);
public class ShapeContainer {
@Embedded
private List shapes;
...
}
public class ShapeContainer {
@Reference
private List shapes;
...
}
public class BlogEntryDAO extends BasicDAO {
public BlogEntryDAO( Morphia morphia, Mongo mongo ) {
super(mongo, morphia, "myBlogDb");
}
}
BlogEntryDAO blogEntryDAO = new BlogEntryDAO(...);
// get one specific blog entry
ObjectId blogEntryId = ...;
BlogEntry myBlogEntry = blogEntryDAO.get(blogEntryId);
// update it
myBlogEntry.setTitle("My Blog Entry");
blogEntryDAO.save(myBlogEntry);
// or just delete it
blogEntryDAO.deleteById(myBlogEntry.getId());
控制类中的DAO可能由依赖注入框架注入,所以不需要关心细节。
public List findByTitle( String title ) {
Pattern regExp = Pattern.compile(title + ".*", Pattern.CASE_INSENSITIVE);
return ds.find(entityClazz).filter("title", regExp).sort("title").asList();
}