Mongo Java驱动程序3-使用对象扩展';文件';
MongoJava驱动程序3增加了对的支持,我将在下面尝试。默认情况下,它附带以下3个对象的编解码器:Document、BasicDBObject和BsonDocument 我试图通过让我的类MyClass扩展文档来做一些非常简单的事情。但是,它失败了,出现了内联指示的错误 我发现了这个,但它似乎太复杂了。。既然MyClass也是一个文档,那么是否有一种简单的方法将其注册为编解码器 多谢各位。 -亨宁Mongo Java驱动程序3-使用对象扩展';文件';,java,mongodb,Java,Mongodb,MongoJava驱动程序3增加了对的支持,我将在下面尝试。默认情况下,它附带以下3个对象的编解码器:Document、BasicDBObject和BsonDocument 我试图通过让我的类MyClass扩展文档来做一些非常简单的事情。但是,它失败了,出现了内联指示的错误 我发现了这个,但它似乎太复杂了。。既然MyClass也是一个文档,那么是否有一种简单的方法将其注册为编解码器 多谢各位。 -亨宁 公共类PlayMongo{ 静态类MyClass扩展了文档{ 公共MyClass(字符串键、对
公共类PlayMongo{
静态类MyClass扩展了文档{
公共MyClass(字符串键、对象值){
超级(键、值);
}
}
公共静态void main(字符串[]args){
MongoClient MongoClient=新的MongoClient();
MongoDatabase db=mongoClient.getDatabase(“测试”);
//很有魅力
MongoCollection documentCollection=db.getCollection(“文档”);
insertOne(newdocument().append(“hello”,“world”));
//CodeConfigurationException失败:找不到类play的编解码器。reactivemongo.PlayMongo$MyClass
MongoCollection myClassCollection=db.getCollection(“myclasses”,MyClass.class);
插入器(新的MyClass(“你好”,“世界”));
}
}
最简单的方法是使用。Morphia准备将Java对象映射到MongoDB集合。我做了一个例子,你可以看到它是如何工作的。在本例中,MongoDB有一个名为people
的集合,该集合映射到名为Person
的Java类。人员
如下所示:
@Entity("people")
public class Person {
private String firstName;
private String lastName;
//obrigactory constructor for Morphia
public Person() {
}
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
@Override
public String toString() {
return firstName + " " + lastName;
}
}
Morphia知道,由于实体
注释,Person对象与people集合相对应。它还需要一个没有参数的构造函数来正确转换对象,这就是为什么我们有一个构造函数
MongoDB Java驱动程序已经相当简单了,但Morphia使CRUD操作更加简单。下一段代码将在数据库中插入和检索一个人:
Morphia morphia = new Morphia();
Datastore datastore = morphia.createDatastore(new MongoClient(), "test");
Person johnDoe = new Person("John", "Doe");
//saves John Doe on DB
datastore.save(johnDoe);
//retrieves all people whose first name is John
List<Person> people = datastore.createQuery(Person.class).filter("firstName", "John").asList();
System.out.println(people.size()); //prints 1
Person person = people.get(0);
System.out.println(person); //prints John Doe
Morphia Morphia=new Morphia();
Datastore Datastore=morphia.createDatastore(新的MongoClient(),“test”);
人约翰多=新人(“约翰”、“多伊”);
//在DB上救了John Doe
datastore.save(约翰多);
//检索名为John的所有人
List people=datastore.createQuery(Person.class).filter(“firstName”,“John”).asList();
System.out.println(people.size())//印刷品1
个人=个人。获取(0);
系统输出打印项次(人)//约翰·多伊的照片
正如您所看到的,我们只需要说明将使用哪个Java类,然后Morphia就可以根据找到的注释发现正确的集合。在此之后,只需进行一次简单的保存
,即可在数据库中插入对象。检索数据的过程基本相同:通知所需的类以及过滤器
重要的是要记住,Morphia会给性能带来额外的成本。在大多数情况下,这不会产生任何影响,但您需要评估您的场景并运行一些自己的测试。我创建了一个小型库,用于为POJO自动创建编解码器。如果您不想使用Morphia这样的大型库,请访问:
它既适用于新mongo驱动程序的同步版本,也适用于异步版本。这样就可以了。。我喜欢它,因为它很干净。谢谢你,丹尼尔!
Morphia morphia = new Morphia();
Datastore datastore = morphia.createDatastore(new MongoClient(), "test");
Person johnDoe = new Person("John", "Doe");
//saves John Doe on DB
datastore.save(johnDoe);
//retrieves all people whose first name is John
List<Person> people = datastore.createQuery(Person.class).filter("firstName", "John").asList();
System.out.println(people.size()); //prints 1
Person person = people.get(0);
System.out.println(person); //prints John Doe